尽管你已经使用了
#ifndef _A
#define _A
class A
{
public:
void Print(char* text);
};
int i;
#endif
但还是出现这样的错误!!!!
Linking...
print1.obj : error LNK2005: "int i" (?i@@3HA) already defined in main.obj
print1.obj : error LNK2005: "int i" (?i@@3HA) already defined in main.obj
Debug/abc.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
主要是你没有搞清楚一个问题, redeclare & redefine
#ifndef #define #endif 只能防止 redeclare,
若多次引用 此头文件, int i 不是被定义了多次吗, 肯定出错啊!
所以我们在被多次引用的头文件里面使用全局变量一定要加 extern
extern int i;
不要再搞错了!
#ifndef _A
#define _A
class A
{
public:
void Print(char* text);
};
int i;
#endif
但还是出现这样的错误!!!!
Linking...
print1.obj : error LNK2005: "int i" (?i@@3HA) already defined in main.obj
print1.obj : error LNK2005: "int i" (?i@@3HA) already defined in main.obj
Debug/abc.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
主要是你没有搞清楚一个问题, redeclare & redefine
#ifndef #define #endif 只能防止 redeclare,
若多次引用 此头文件, int i 不是被定义了多次吗, 肯定出错啊!
所以我们在被多次引用的头文件里面使用全局变量一定要加 extern
extern int i;
不要再搞错了!
本文讲解了在C/C++中如何避免全局变量因头文件多次包含而引起的重复定义错误。通过正确使用extern关键字,可以有效解决由#ifndef #define #endif预处理指令仅能防止重复声明所带来的问题。
2129

被折叠的 条评论
为什么被折叠?



