即使使用前向声明也未定义类型错误

时间:2015-09-21 17:43:41

标签: c++ header-files forward-declaration circular-reference

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

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

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

显然我缺少某些东西。有人能指出我正确的方向,为什么我会收到这个错误。

1 个答案:

答案 0 :(得分:2)

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

但是,根据您当前的设计,您具有循环依赖性。更改Header2文件以删除"Header.hpp"并转发sample_class的声明,以解决循环依赖关系。

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