在多个.cpp中包含相同的标头

use*_*408 0 c c++ linker header

我试图在一些其他.cpp文件中使用来自一个.h文件的数据(甚至函数),并且我得到一个建议链接错误的编译器区域.我知道这将非常简单,但我正在用它来伤害自己.我正在使用Xcode,但我不认为这是问题,它更有可能让我有点想!

我的版本更复杂,所以我将使用一个非常简单的例子来说明我正在寻找的东西.

如果我有一个头文件data1.h:

 int a,b; // etc
Run Code Online (Sandbox Code Playgroud)

然后是一个.cpp文件,比如setdataA.cpp:

 #include "data1.h"    
 void set_a(int numb){ a=1;} 
Run Code Online (Sandbox Code Playgroud)

然后是另一个,比如setdataB.cpp:

 #include "data1.h"    
 void set_b(int numb){ b=10;} 
Run Code Online (Sandbox Code Playgroud)

我想知道我做错了什么,也许我甚至应该尝试做这样的事情.

我甚至试图交换

#include "data1.h"  
Run Code Online (Sandbox Code Playgroud)

在setdataB.cpp中

#include "setdataA.h"
Run Code Online (Sandbox Code Playgroud)

但它仍然无法正常工作!

mle*_*age 5

首先,如果您提供了实际错误,它会有所帮助.

其次,您应该使用INCLUDE GUARD包装标题内容,如下所示:

#ifndef MY_UNIQUE_INCLUDE_GUARD
#define MY_UNIQUE_INCLUDE_GUARD
... // header contents
#endif
Run Code Online (Sandbox Code Playgroud)

第三,您的问题可能是在两个.cpp文件中定义了一个和一个整体(通过标题包含),从而产生多个定义的符号.

相反,您可能意味着在标题中声明它们而不定义它们:

extern int a;
extern int b;
Run Code Online (Sandbox Code Playgroud)

然后,在.cpp文件中,定义它们:

int a;
int b;
Run Code Online (Sandbox Code Playgroud)

只需在一个.cpp文件中定义它们即可.您可以在一个.cpp文件中定义一个,在另一个.cpp文件中定义b,如果这对您的项目有意义的话.