C++ 未定义的类型错误,即使有转发声明
我在阅读循环参考资料和转发声明。我知道在头文件中有实现不是一个好的设计实践。然而,我正在试验,无法理解这种行为 使用以下代码(包含转发声明),我希望它能够生成,但是我遇到了这个错误:C++ 未定义的类型错误,即使有转发声明,c++,header-files,forward-declaration,circular-reference,C++,Header Files,Forward Declaration,Circular Reference,我在阅读循环参考资料和转发声明。我知道在头文件中有实现不是一个好的设计实践。然而,我正在试验,无法理解这种行为 使用以下代码(包含转发声明),我希望它能够生成,但是我遇到了这个错误: Error 1 error C2027: use of undefined type 'sample_ns::sample_class2' 页眉.hpp #ifndef HEADER_HPP #define HEADER_HPP #include "Header2.hpp" namespace sampl
Error 1 error C2027: use of undefined type 'sample_ns::sample_class2'
页眉.hpp
#ifndef HEADER_HPP
#define HEADER_HPP
#include "Header2.hpp"
namespace sample_ns
{
class sample_class2;
class sample_class{
public:
int getNumber()
{
return sample_class2::getNumber2();
}
};
}
#endif
水头2.1水电站
#ifndef HEADER2_HPP
#define HEADER2_HPP
#include "Header.hpp"
namespace sample_ns
{
class sample_class;
class sample_class2{
public:
static int getNumber2()
{
return 5;
}
};
}
#endif
很明显我错过了什么。有人能告诉我为什么会出现这个错误吗。因为您使用的是该类的特定方法,所以需要一个完整的include
但是,对于当前的设计,您有一个循环依赖关系。更改Header2文件以删除“Header.hpp”
,并转发示例类的声明以解决循环依赖关系
#ifndef HEADER2_HPP
#define HEADER2_HPP
namespace sample_ns
{
class sample_class2{
public:
static int getNumber2()
{
return 5;
}
};
}
#endif
sampele\u class
=>sample\u class
就您在此处发布的真实代码而言,这是您必须完成的。您正在试验代码并键入错误。将声明与定义分开。请看这个:谢谢你的链接。此外,是否有任何解决方法可以让这种设计在不将实现移动到cpp文件的情况下工作(保持循环依赖关系,即假设我必须在Header2中使用sample_类的对象)。“假设我需要循环依赖关系。”然后你就死在水里了。根据定义,不可能编译具有循环依赖关系的代码。我可能会将定义移到cpp文件中。thanks@CoryKramer,不,不可能有聚合循环依赖关系。也就是说,您不能在另一个完整类对象中包含完整类对象。用一个指针就可以解决问题。@Adrian这是我回答的第一行。但在这一点上,这不是一个循环依赖。