总共四个文件。分别是定义main函数的text.cpp
定义了一个类 的 a.cpp和a.h
还有一个b.h
text.cpp代码
#include "a.h"
#include "b.h"
int main()
{
//some code
}
a.h代码
#pragma once
class Ca
{
//some code
};
a.cpp代码
#include "a.h"
#include "b.h"
//some code
b.h代码
#pragma once
#include "a.h"
Ca cc;
//some code
编译链接出错
1>正在编译...
1>text.cpp
1>a.cpp
1>正在生成代码...
1>正在链接...
1>a.obj : error LNK2005: "class Ca cc" (?cc@@3VCa@@A) 已经在 text.obj 中定义
1>F:\工程\Visual Studio 2008\Projects\gf\Debug\gf.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
text.cpp,include后加
Ca cc;
在b.h中,
把
Ca cc;
改为
extern Ca cc;
全局变量应该定义在cpp中,放头文件h中,就会要么多个包含,要么没有包含。都达不到你的要求。
在其他cpp中要引用全局变量就用extern修饰符,表示它是在其它地方定义的,这里只是引用它。
一般的规则,变量定义放在 .cpp 中,如:Ca cc;类型的声明放在 .h 中,如 Ca 的定义。
在b.h中,extern Ca cc;
看来大家讨论的很欢,没错,头文件的所有变量建议加上extern 属性