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()
{
    // ....
}

 

posted on 2013-01-30 23:06  Tec Dig  阅读(700)  评论(0)    收藏  举报

导航