2012-07-16 70 views
0

我想从一个.h文件中的一个.cpp文件中使用数据(或甚至函数),并且我得到一个编译器区域,它提示链接错误。我知道这将非常简单,但我伤害了自己。我正在使用Xcode,但是我不认为这是问题所在,它更可能是我有点想象!在多个.cpp中包含相同的头文件

我的版本比较复杂,所以我会用一个非常简单的例子来说明我在找什么。

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

int a,b; // etc 

然后一个.cpp文件,说setdataA.cpp:

#include "data1.h"  
void set_a(int numb){ a=1;} 

然后另一个说setdataB.cpp:

#include "data1.h"  
void set_b(int numb){ b=10;} 

我想知道我做错了什么,也许如果我应该尝试做这样的事情。

我甚至想换入setdataB.cpp

#include "data1.h" 

#include "setdataA.h" 

和它仍然没有工作!

回答

1

我想出了我做错了什么。这是因为我误解了头文件如何实际工作以及实际上我想要做的事情如此简单/基本,以至于人们(回答我)误会了我实际上想要做的事情(我向他们道歉) 。

我应该做的是在data1中。CPP放在

int a; 
int b; 

void set_a(int numb) { a=numb; } 
void set_b(int numb) { b=numb; } 

int get_a() { return a } 
int get_b() { return b } 

然后在data.h把

void set_a(int numb); 
void set_b(int numb); 

int get_a(); 
int get_b(); 

data.h然后可以包括在尽可能多的文件被通缉,并设置或获取A或B可以通过只实现调用其中一个功能,而不是直接改变或调用它们的值。

希望这可以帮助人们,如果他们试图解决这个问题。 (当然,如果我觉得这很基本,我对自己在提问方面缺乏知识感到有点惭愧,还有很长的一段时间回来回答这个问题,因为我有点不好意思,其次是这是我的第一个问题,我也认为我的问题可能会被要求更好地给我更多的想法,我要求)

-1

对此我很生疏,但我相信只要包含已包含的文件,就会出现链接错误。从你的例子来看,似乎并不是这样,但请仔细看看你的文件。这个例子会给你一个错误:file1.h包含file2.h,file3.h包含file1和file2。在这种情况下,您会看到file2将在file3中包含两次。

5

首先,如果您提供了实际的错误,它将有所帮助。

#ifndef MY_UNIQUE_INCLUDE_GUARD 
#define MY_UNIQUE_INCLUDE_GUARD 
... // header contents 
#endif 

三,您的问题可能是该整数a和b两个.cpp文件通过被定义(通过包含:

其次,你应该用include防范类似这样的包装你的头内容头部)导致多个定义的符号。

相反,你可能意味着宣布他们在头没有定义他们:

extern int a; 
extern int b; 

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

int a; 
int b; 

恰好一个只要定义他们.cpp文件。如果您的项目有意义,您可以在另一个.cpp文件中定义一个.cpp文件和b。

+0

嗨mlepage,错误是“铛:错误:链接器命令失败,退出代码1(使用-v来查看调用)“。我想我可能会解释这个问题有点不对。我想在一个文件中包含数据和函数,然后所有文件都可以被多个文件访问。所以我的例子应该是两个.cpp文件都想使用ints a和b。 – user1529408 2012-07-17 11:28:01

相关问题