C++笔记:头文件相互包含和全局变量
想要实现的效果
class A 和 class ListA
ListA保存一个A的数组,实现对A对象的管理
new A()时,在A的构造函数中把this添加到ListA中,delete a时,把this从ListA中移除
以前写别的语言写多了,就一直不习惯C++中一个类把头文件和CPP文件分开写,都是使用内联的方式,但是遇到这种问题include来include去就出了各种问题。上网查了查资料,终于弄明白了解决的方法。
首先是main.cpp
// main.cpp
#include "A.h" #include "ListA.h" ListA * lista = new ListA(); // 声明一个全局的ListA对象 void update() // 自己定义的刷新函数 { lista->update(); // 使用lista对里面保存的A对象们进行自定的操作 } void main() { // 一些代码
}
在A类的头文件中要先声明ListA的类,然后在A类的CPP中引用ListA的头文件
// A.h #pragma once class ListA; // 在这里声明ListA class A { public:
A(void); ~A(void); }; #endif // A.cpp #include "A.h" #include "ListA.h" extern ListA * lista; // extern 表示这个变量已经在别处声明过了 A::A(void) { lista->Add(this); } A::~A(void) { lista->Remove(this); }
然后在ListA的头文件中照常引用A的头文件就行了
// ListA.h #pragma once #include "A.h" class ListA { public: void Add(A * a); void Remove(A * a); void update(): }; // ListA.cpp void ListA::Add(A * a) { // 把a放入自己定义的数组中 } void ListA::Remove(A * a) { // 将a从数组中移除 } void ListA::update() { // .... }
浙公网安备 33010602011771号