我正在阅读有关循环引用和前向声明的内容。我确实理解,将实现放在头文件中并不是一个好的设计实践。然而,我正在做实验,无法理解这种行为。
使用下面的代码(包含前向声明),我希望它能够构建,但是我得到了这个错误:
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();
}
};
}
#endifHeader2.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很明显我错过了什么。有人能给我指出正确的方向吗?为什么我会犯这个错误。
发布于 2015-09-21 17:46:27
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;
}
};
}
#endifhttps://stackoverflow.com/questions/32701467
复制相似问题