第一类、全局变量包含。这类错误通常是由于重复包含了某种变量或类的声明,但是很多时候,我们需要在多个类中引用同样的变量,所以当然希望把这些数据写到一个文件中,然后在不同的类中include它。而这会直接导致“重定义错误”,解决办法如下:
以下是转载内容:C++中的全局变量
在C++中定义全局变量是应该尽量在.cpp文件中定义,而不要在.h 文件中 定义,定义好了之后,可以在.h文件中利用 extern关键字进行 声明.如果在.h文件中定义的话,多层包含可能会引起重复定义的错误.下面是一个示例
在base.cpp中定义全局变量
base.cpp
- int g_MaxTime;
- int g_MinTime;
- int g_MaxCount;
- int g_MinCount;
base.h
- extern int g_MaxTime;
- extern int g_MinTime;
- extern int g_MaxCount;
- extern int g_MinCount;
然后其他文件要使用这些变量的时候
只要#include "base.h"就可以了,而且不会引起重复定义的错误
第二类:各个类互包含。
解决方案转载自:类的互包含
假如有类A,B,C。
想在 A中包含 B和C的头文件。通常有两种方法 :
一是在A的头文件中添加
#include"B.h"
#include"C.h"
一是在A的.cpp中添加
#include"B.h"
#include"C.h"
但是二者有区别。
如果想在A的头文件中的类A的声明中定义B和C类型的对象指针的时候第一种方法是对的,但
是第二种方法是错的。
可以修改第二种方法使其也课编译成功:在类A的头文件中加入类B和C的前视声明。
class B;
class C;
此时在A的.cpp中包含B和C的头文件即可在A的头文件中生命B和C的对象指针。但是不可以声
明B和C的对象,因为A头文件中未包含B和C的类的定义实现,只是个前视声明。