C ++的可变的多个定义C ++的可变的多个定义(c++ multiple definitions

2019-06-01 09:47发布

我有4个文件(2头,和2个代码文件)。 FileA.cpp,FileA.h,FileB.cpp,FileB.h

FileA.cpp:

#include "FileA.h"

int main()
{
    hello();
    return 0;
}

void hello()
{
    //code here
}

FileA.h:

#ifndef FILEA_H_
#define FILEA_H_
#include "FileB.h"
void hello();

#endif /* FILEA_H_ */

FileB.cpp:

#include "FileB.h"

void world()
{
    //more code;
}

FileB.h:

#ifndef FILEB_H_
#define FILEB_H_

int wat;
void world();


#endif /* FILEB_H_ */

当我尝试编译(与Eclipse),我得到“'屈”的多个定义”我不知道为什么,似乎这应该只是罚款。

Answer 1:

我不打算包括所有的细节,但你定义一个全局变量, wat编译中的UINT的两倍。

要修复,使用以下命令:

FileB.h

extern int wat;

FileB.cpp

int wat = 0;

这( extern )告诉变量编译wat 某处存在,它需要找到它自己(在这种情况下,它在FileB.cpp



Answer 2:

不要声明在头部的变量。 #include字面复制和粘贴文件的内容到另一个文件(即,做任何文件#include "FileB.h"将逐字FileB.h的内容复制到它,这意味着int wat获取每一个定义,它的文件#include "FileB.h" )。

如果您要访问wat从FileA.cpp,并且它在FileB.cpp声明,你可以将其标记为extern在FileA.cpp。



Answer 3:

你得到多重定义,因为wat是在文件范围内声明和2个源文件得到的可见两次。

取而代之的是,把这些变量declartion extern一个源文件中定义它。

extern int wat;  // In FileB.h

int wat;   // In FileB.cpp


Answer 4:

现在我找到了答案(我猜看文件一个又一个帮助)的问题是,编译器创建一个FileB.o其中有笏的定义,然后它会尝试编译FilB.o与FileA.cpp,而FileA.h有包括FileB.h它现在也有笏的定义。



Answer 5:

这笏变量声明的是,应在一段cpp的文件属于一个定义。 这是因为如果你把你的函数体到头部。

您需要笏声明之前把extern和没有的extern复制当前的声明到cpp文件之一。



文章来源: c++ multiple definitions of a variable