编译时出现multiple definition of `xxxxxx'的解决办法

出错原因:一般是因为在头文件里进行了定义或者实例化,导致多重定义,记住在头文件里只进行声明。

1、Don't define variables in headers. Put declarations in header and definitions in one of the .c files.

In config.h

extern const char *names[];

In some .c file:

const char *names[] =
    {
        "brian", "stefan", "steve"
    };

If you put a definition of a global variable in a header file, then this definition will go to every .c file that includes this header, and you will get multiple definition error because a varible may be declared multiple times but can be defined only once.

2、You must never instantiate(实例化)things in header files, i.e. never define anything, just declare them.

You should put a single definition of each declared thing in one of the C files, and have extern declarations in the shared header:

In mydata.h:

struct Foo {
  float baryness;
  float baziness;
};

extern struct Foo TheFoo;

In one C file:

#include "mydata.h"

struct Foo TheFoo; //实例化

In other headers in the project:

#include "mydata.h"

printf("the baziness is %f right now\n", TheFoo.baziness);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值