class A
{
class B;
B::data myData; //Error: incomplete type not allowed.
class B
{
public:
struct data
{
int number;
};
};
};
在上面的代碼中,我該如何在類A中聲明類型數據的成員變量?從外部類訪問嵌套的內部類結構
class A
{
class B;
B::data myData; //Error: incomplete type not allowed.
class B
{
public:
struct data
{
int number;
};
};
};
在上面的代碼中,我該如何在類A中聲明類型數據的成員變量?從外部類訪問嵌套的內部類結構
B
必須定義你在A::myData
的聲明中使用它之前:
class A
{
class B
{
public:
struct data
{
int number;
};
};
B::data myData;
};
我認爲你所需要做的就是把類定義放在變量聲明的前面。編譯器不知道里面是什麼class B
,只知道它的存在,直到它遇到的類的實際定義
使用範圍說明符,並確保您的文件中定義後不使用,直到類型:
class A
{
class B
{
public:
struct data
{
int number;
};
};
B::data myData;
};
另外,注意前瞻性聲明中除非你只是使用指向類的指針,否則不行。當您像創建類一樣創建類的實例時,需要立即爲其提供該類的定義。
好的。我認爲可能有一種方法讓編譯器在實際定義它之前知道B :: data是一個結構,類似於聲明類B; – user974967
即使可以,您仍然無法使用它來定義數據成員:類型必須是_complete_。 –
James是正確的,在完全定義它之前可以使用類型的唯一方法是作爲指針,因爲指針佔用固定空間 –