【发布时间】:2013-05-06 18:07:49
【问题描述】:
Main.cpp
#include "Test1.h"
#include "Test2.h"
int main(){
Test1 t1;
Test2 t2;
t1.process(t2);
t2.process(t1);
}
Test1.h
#ifndef TEST1
#define TEST1
#include "Test2.h"
class Test1 {
public:
void process(const Test2& t) {};
};
#endif // !TEST1
Test2.h
#ifndef TEST2
#define TEST2
#include "Test1.h"
class Test2 {
public:
void process(const Test1& t) {};
};
#endif // !TEST2
VS2012 说:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2143: syntax error : missing ',' before '&'
error C2664: 'Test2::process' : cannot convert parameter 1 from 'Test1' to 'const int'
我很确定这又是 循环包含 问题(我偶尔会遇到它),但这次我不确定为什么不编译。
注意:这些类只依赖于彼此的引用,它们的大小是已知的。是因为包含保护 (#ifndef),导致其中一个测试标头包含另一个作为空文件吗?
【问题讨论】:
-
为什么需要包含?
*.h中的前向声明就足够了。 -
这有数百万个重复项。发帖前请努力研究问题。
-
看here,很好的解释。在决定是转发声明还是包含时,您可以根据经验使用它。