【发布时间】:2011-02-03 20:54:28
【问题描述】:
我有一个类,称为 A,它有自己的头文件。然后我有另一个类,叫做 B,它也有它自己的头文件。它们每个都有自己的 .cpp 文件,我在其中实现了它们的所有功能。
我试图让 B 类有一个 A 类类型的变量作为私有变量,但我不断收到错误“A”没有命名类型
我的代码如下所示:
main.h:
#ifndef MAIN_H
#define MAIN_H
#include "A.h"
#include "B.h"
#endif
main.cpp:
#include "main.h"
int main( int argc, char* args[]) {
B test;
}
啊哈:
#ifndef A_H
#define A_H
#include "main.h"
class A {
public:
//public functions
private:
//private variables
};
#endif
B.h:
#ifndef B_H
#define B_H
#include "main.h"
class B {
public:
//public functions...
private:
A temp;
}
#endif
所以我所有的包含都在 main.h 中,它在 B 之前包含 A。B 有一个类型为 A 的变量,但它包含在 main.h 中,而 B.h 包含 main.h。但是,我不断收到一条错误消息:
error: 'A' does not name a type.
我做了一些谷歌搜索,这似乎意味着 A 在您使用它时没有定义,但它应该在那里定义,因为它包含在 main.h 中,对吧?
【问题讨论】:
-
为什么不把
B.h包括在main.cpp和A.h在B.h中?只包括你需要的东西。我很好奇您的编译器是否对包含递归感到困惑。main.h->A.h->main.h等 -
@Mark Loeser:保护常量 (xx_H) 可以避免递归问题,但是包含策略确实非常奇怪。
-
@trojanfoe:是的......这是漫长的一天。我真的应该回家了:)