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这是我回答的第一行。但在这一点上,这不是一个循环依赖。