一个variables的c ++多重定义
我有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_ */ 
当我尝试编译(与日食)时,我得到了“wat'的多重定义”而我不知道为什么,它似乎应该工作得很好。
我不打算包括所有的细节,但是你定义了一个全局variables,在你的编译uint中两次。
要修复,请使用以下内容:
FileB.h
 extern int wat; 
FileB.cpp
 int wat = 0; 
 这个( extern )告诉编译器,variableswat存在于某个地方 ,并且它需要自己find它(在这种情况下,它在FileB.cpp ) 
 不要在头中声明variables。  #include将文件的内容复制并粘贴到另一个文件中(即, #include "FileB.h"任何文件将从字面上将FileB.h的内容复制到其中,这意味着在每个文件中定义int wat包含#include "FileB.h" )。 
 如果要从FileA.cpp访问wat ,并在FileB.cpp中声明,可以在FileA.cpp中将其标记为extern 。 
 你可以得到多个定义,因为wat是在文件范围内声明的,在两个源文件中可以看到两次。 
 相反,将variables声明为extern并将其定义在一个源文件中。 
 extern int wat; // In FileB.h int wat; // In FileB.cpp 
我现在find了答案(我想看一个接一个的文件帮助)问题是,编译器创build一个FileB.o其中有一个定义的wat,然后它试图编译FilB.o与FileA.cpp,而FileA.h包含了FileB.h,现在它也会有一个wat的定义。
那个watvariables声明是一个应该属于cpp文件的定义。 就好像你将你的函数体放入头文件一样。
您需要在wat声明之前放置extern,并将当前声明(不带extern)复制到其中一个cpp文件中。