本人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中来操作,这样是比较规范的。