【发布时间】:2016-07-25 16:06:28
【问题描述】:
所以我有一个类,其中包含一些成员变量,这些成员变量是在命名空间中定义的结构的实例,而同一命名空间中的函数有一个参数,该参数是指向上述类的实例的指针。
这看起来像:
SomeClass.h
#ifndef SOME_CLASS_H
#define SOME_CLASS_H
include "SomeNamespace.h"
class SomeClass
{
private:
SomeNamespace::SomeStructure instance1, instance2;
...
SomeNamespace.h
#ifndef SOME_NAMESPACE_H
#define SOME_NAMESPACE_H
#include "SomeClass.h"
namespace SomeNamespace
{
namespace AnotherNamespace
{
void SomeFunction( SomeClass *pSomeClass );
}
struct SomeStructure
{
...
}
...
我收到的错误:
Error C2065 'SomeClass': undeclared identifier
Error C2653 'SomeNamespace' : is not a class or namespace name
第一个错误相关:
void SomeFunction( SomeClass *pSomeClass );
第二个错误与:
SomeNamespace::SomeStructure instance1, instance2;
我通过添加前向声明 'class SomeClass;' 修复了第一个错误到文件顶部:
SomeNamespace.h
#ifndef SOME_NAMESPACE_H
#define SOME_NAMESPACE_H
#include "SomeClass.h"
class SomeClass;
namespace SomeNamespace
{
namespace AnotherNamespace
{
void SomeFunction( SomeClass *pSomeClass );
}
struct SomeStructure
{
...
}
...
我试图修复错误二,对命名空间和结构做同样的事情:
SomeClass.h
#ifndef SOME_CLASS_H
#define SOME_CLASS_H
include "SomeNamespace.h"
namespace SomeNamespace
{
struct SomeStructure;
}
class SomeClass
{
private:
SomeNamespace::SomeStructure instance1, instance2;
...
对命名空间和其中的结构进行前向声明会给我这些错误:
'SomeClass::instance1' uses undefined struct 'SomeNamespace::SomeStructure'
'SomeClass::instance2' uses undefined struct 'SomeNamespace::SomeStructure'
我已经搜索过其他用户发布的这个问题,但是我没有成功找到一个帖子。
如果有人对此问题有疑问并认为需要给它差评,那么还请添加评论说明为什么这是一个不好的问题,以帮助我下次避免同样的错误。
提前感谢大家的帮助。
【问题讨论】:
-
经典之作。请在 SO 中搜索递归包含或头文件组织。
-
Josh 这是一个打字错误,而不是实际代码的样子。感谢您指出这一点,我已经编辑了主要帖子以反映这一点。
-
你知道大卫的解决方案吗?这就是这里的问题,但我只是不知道如何解决它
-
@MikeO 您可以对未定义类型的指针 使用前向声明,但不能对未定义类型本身使用前向声明。这里的正常方法是声明
SomeNamespace::SomeStructure* instance1, instance2;。当然这意味着instance1和instance2必须动态分配。 -
我也已经有了前向声明 drescherjm
标签: c++ class struct namespaces forward-declaration