C++ 头文件重复包含
2015-08-07 09:54
260 查看
当头文件重复包含时,常常会遇到编译不过的情况,这时,只需要预先定义一下某变量或类即可:
例:
//a.h
#include "b.h"
class CTestA
{
public:
CTestB m_b; //error
}
//b.h
#include "a.h"
class CTestB
{
public:
CTestA m_a; //error
}
正确的做法是:
//a.h
#include "b.h"
class CTestB;
class CTestA
{
public:
CTestB *m_b; //改成指针类型
}
//b.h
#include "a.h"
class CTestA;
class CTestB
{
public:
CTestA *m_a; //改成指针类型
}
PS:
要给m_b分配内存只能在a.cpp的构造函数中进行,而不能在头文件中直接实现!!
例:
//a.h
#include "b.h"
class CTestB;
class CTestA
{
public:
CTestB *m_b; //改成指针类型
CTestA(){m_b=new CTestB;} //error C2036: ****: 未知的大小
}
同理,要对CTestB进行某操作,而此操作必须先知道sizeof(CTestB)的大小时,都必须要在
相应的*.cpp中进行实现!如 m_b++;则同样会报 error C2036 的错误
例:
//a.h
#include "b.h"
class CTestA
{
public:
CTestB m_b; //error
}
//b.h
#include "a.h"
class CTestB
{
public:
CTestA m_a; //error
}
正确的做法是:
//a.h
#include "b.h"
class CTestB;
class CTestA
{
public:
CTestB *m_b; //改成指针类型
}
//b.h
#include "a.h"
class CTestA;
class CTestB
{
public:
CTestA *m_a; //改成指针类型
}
PS:
要给m_b分配内存只能在a.cpp的构造函数中进行,而不能在头文件中直接实现!!
例:
//a.h
#include "b.h"
class CTestB;
class CTestA
{
public:
CTestB *m_b; //改成指针类型
CTestA(){m_b=new CTestB;} //error C2036: ****: 未知的大小
}
同理,要对CTestB进行某操作,而此操作必须先知道sizeof(CTestB)的大小时,都必须要在
相应的*.cpp中进行实现!如 m_b++;则同样会报 error C2036 的错误
相关文章推荐
- C/C++获取当前系统时间
- C语言基础、技巧_自总结版
- C++ Hello World
- C语言的关系运算符
- 链表排序(C语言)选择排序
- C++ Primer Plus第六版 第九章 编程练习答案
- C/C++知识要点4——printf函数以及cout的计算顺序
- c++学习笔记1
- c++ list iterator not incrementable
- C/C++知识要点3——类成员函数的重载、覆盖和隐藏的区别
- C++中的string类的用法小结
- qdbuscpp2xml工具用法中输入和输入
- 求最大连续子向量之和
- C++_避免调用复制构造函数
- C语言 内存泄露(只对XP有效果)
- 重温C++之“strcpy_s与strcpy的比较”
- 重温C++之“字符类型总结区别wchar_t,char,WCHAR”
- C++ Virtual详解
- C++中friend的使用(friend function and friend class)
- c++ _ 模板与泛型编程