我有一个包含模式如下:
/*
* Class1.h
*/
#ifndef CLASS1_H_
#define CLASS1_H_
#include "Class2.h"
namespace Class1_namespace
{
class Class1
{
Class2* Class2_ptr;
void Class1_member()
{
(*Class2_ptr).Class2_method();
}
};
}
#endif /* CLASS1_H_ */
/*
* Class2.h
*/
#ifndef CLASS2_H_
#define CLASS2_H_
#include "Class1.h"
class Class2
{
Class1_namespace::Class1 Class2_data;
public:
void Class2_method(){};
};
#endif /* CLASS2_H_ */
/*
* main.cpp
*/
#include "Class1.h"
int main()
{
return 0;
}
但是,这会导致错误“'Class1_namespace'没有命名类型。”
这个错误是由我的包含物的排序引起的吗?
有哪些可能的解决方案?我对前瞻性声明解决我的问题持怀疑态度。
答案 0 :(得分:2)
Class1不需要包含Class2。
如果你有相互依赖(你没有 - 你可能不会包含2合1),你通常可以通过使用前向声明而不是包含来解决它。
例如,假设Class1看起来像这样
#include "Class2.h"
namespace Class1_namespace
{
class Class1
{
Class2* class2;
};
}
如果您认为自己需要包含,则可以这样做:
class Class2;
namespace Class1_namespace
{
class Class1
{
Class2* class2;
};
}
打破相互包容。
答案 1 :(得分:0)
在class1.h中,尝试删除class2.h中不必要的循环#include。如果需要循环依赖 - 或者即使不是 - 请考虑使用前向声明。