未定义的类型错误,即使有前向声明
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
我正在阅读循环引用和前向声明。我明白在头文件中实现并不是一个好的设计实践。但是我正在试验,无法理解这种行为。
我希望使用以下代码(包含前向声明)构建它,但是我收到此错误:
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