c++全局变量的使用问题

本人c++小白,最近在做课设,遇到一个问题:我写了个Table容器,可以放一些信息(比如学生类,教师类),然后想在程序一开始就够建好这些表,作为全局变量,方便在其他地方直接使用。我是创建了一个相当于静态类的Tables类(里面维护着所有的表)来实现的。但如果我想在班级类内实现打印班级全部学生的信息时,就有问题了:这样的话,我要使用全局变量students去找这些学生,就要在Class.cpp里包含Tables.h,然而Tables.h里又包含了Class.h(因为Table是个模板类,它的类型参数要使用Class),会造成循环包含。。有没有什么办法能解决这个问题呢?

看着有点晕呢。 1 头文件一般都会写"#ifndef xxx #define xxx" 这样的语句防止重复包含的。
2 全局变量不要在头文件里声明, 只能在cpp文件里声明变量出来, 头文件里只能extern 声明有这样的变量

最好的办法就是你把模板类需要的类型都抽离出来,单独放在一个.h中,其他需要的直接包含这个文件都好了,这样可以避免死循环

这编辑器显示有问题:  

 std::list<student *> students

student.h
#ifndef __STUDENT_H
#define __STUDENT_H

class Student {

};

#endif /* __STUDENT_H */
////////////////////////////////////

table.h

#ifndef __TABLE_H
#define __TABLE_H

#include
#include "student.h"
#include

extern std::list students;

#endif /* __TABLE_H */
/////////////////////////////

table.cpp

#include
#include
#include "table.h"

std::list students;

void func()
{

}
//////////////////////////////

test.cpp

#include "student.h"
#include "table.h"

int main(void)
{
students.push_back(new Student);

return 0;

}


.h文件写声明 .cpp写具体实现 最好不要在.h中包含.h 像你的class班级类要访问student学生类时,就只需要在class.cpp中添加#include "student.h"就可以了。一般写程序你还需要一个main.cpp来写程序执行,所以你只要新建一个main.cpp,在里面包含class和student类,然后在main.cpp中来操作,这样是比较规范的。