未定义的类型错误,即使有前向声明

Undefined type error even with forward declaration

我正在阅读循环引用和前向声明。我明白在头文件中实现并不是一个好的设计实践。但是我正在试验,无法理解这种行为。

我希望使用以下代码(包含前向声明)构建它,但是我收到此错误:

Error   1   error C2027: use of undefined type 'sample_ns::sample_class2'

Header.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

Header2.hpp

#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

显然我遗漏了一些东西。有人可以指出我为什么会收到此错误的正确方向吗?

You can only get away with forward declare if you have pointers or references。由于您正在使用 class 的特定方法,因此您需要完整包含。

但是对于您当前的设计,您有一个循环依赖。更改您的 Header2 文件以删除 "Header.hpp" 并转发声明 sample_class 以解决循环依赖。

#ifndef HEADER2_HPP
#define HEADER2_HPP
namespace sample_ns
{
    class sample_class2{
    public:
        static int getNumber2()
        {
            return 5;
        }
    };
}
#endif