即使使用前向声明也会出现未定义的类型错误

2024-05-04

我正在阅读循环引用和前向声明。我确实知道在头文件中实现并不是一个好的设计实践。然而我正在尝试并且无法理解这种行为。

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

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

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


如果你有指针或引用,你只能逃避前向声明 https://stackoverflow.com/questions/553682/when-can-i-use-a-forward-declaration。由于您正在使用该类的特定方法,因此您需要完整包含。

然而,根据您当前的设计,您存在循环依赖。更改 Header2 文件以删除"Header.hpp"并转发声明sample_class来解决循环依赖。

#ifndef HEADER2_HPP
#define HEADER2_HPP
namespace sample_ns
{
    class sample_class2{
    public:
        static int getNumber2()
        {
            return 5;
        }
    };
}
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使使用前向声明也会出现未定义的类型错误 的相关文章

随机推荐