GCC报错multiple definition of ***,可明明加了宏定义避免重复包含头文件啦?

天台道人 发布于 2014/11/05 17:29
阅读 1K+
收藏 0

main.cpp


#include <iostream>
using namespace std;
#include "testcpp.h"

int main() {
	int q = AddCpp(1, 2);
	q++;
#if __cplusplus
	cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
#endif
	return 0;
}


testcpp.h

#ifndef TESTCPP_H_
#define TESTCPP_H_

int m_ParamCpp;
int AddCpp(int a, int b);

#endif /* TESTCPP_H_ */



testcpp.cpp

#include "testcpp.h"


int AddCpp(int a, int b)
{
	m_ParamCpp++;
	return a + b;
}



eclipse cdt + Mingw gcc编译的,报错“Main.cpp: multiple definition of `m_ParamCpp'”和“testcpp.cpp:5: first defined here”,我在testcpp.h中已经加了宏定义避免头文件重复包含,怎么会这样?谁能跟我解释一下?

加载中
1
stxy0509
stxy0509

在main.cpp中包含一次,在testcpp.cpp包含一次,当然就两次了。

避免头文件重复只是在一个文件中防止这个头文件被包含两次,并不能防止它被包含在两个不同的文件中。

天台道人
天台道人
好吧,感觉应当就是因为这个,居然有点转不过弯来了
中山野鬼
中山野鬼
哈。这个正解。
0
无量神通
无量神通
把变量改成static的,gcc编译的时候每个cpp文件都是独立编译的,比如main.cpp会生成main.o,testcpp.cpp会生成testcpp.o,这个时候两个.o文件中都有m_ParamCpp的定义,所以会重复
0
wowk
wowk
头文件中用extern声明一下
wowk
wowk
定义放在cpp中
0
Force武装卫队
Force武装卫队
extern int m_ParamCpp; 在main.cpp 或者test.cpp int m_ParamCpp;
返回顶部
顶部