所以我有一些成員變量是一個命名空間中定義的結構的實例的類,並且該同一命名空間內的函數具有一個參數是一個指向上述類的一個實例。C++如何擁有一個依賴於名稱空間的類以及依賴於該類的名稱空間?
這看起來像:
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;
我通過添加前向聲明固定在第一錯誤 '類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遞歸包含或頭文件組織。 –
請注意,您的'SomeStructure'前向聲明僅在名稱空間SomeNamespace內,而不在SomeNamespace :: AnotherNamespace內,SomeClass正在嘗試使用它。 –
喬希這是一個打字錯誤,而不是實際的代碼是如何。感謝您指出這一點,我編輯了主要帖子來反映這一點。 – MikeO