2010-06-20 208 views
2
#include<iostream> 
using namespace std; 
struct My_Class{ 
class My_struct{ 
int am_i_in_class_or_struct; 
}; 
}; 

int main(){ 
cout<<sizeof(My_Class)<<endl; 
cout<<sizeof(My_struct)<<endl; 
cout<<sizeof(int); 
} 

請說明: 當我執行上述程序上的Turbo C我得到輸出:現在不應大小在每種情況下可以相同,或至少My_Class應該具有與My_struct相同或更大的尺寸! 如果程序中有錯誤,請儘可能修復它們,否則忽略它並專注於手頭的問題! 我不信任Turbo C,但是現在我的VS 2008一直在崩潰,這是因爲我的Ram壞了!嵌套結構體和類

回答

5

您嵌套聲明,但不是數據。在另一個類中聲明一個類並不奇怪地使內部類的數據成員也是外部類的成員。您的代碼幾乎等同於僅僅一個區別

struct My_Class{ 
}; 

class My_struct{ 
    int am_i_in_class_or_struct; 
}; 

只有一個區別。在你的代碼中,結構的名字是My_Class::My_struct。在我的版本中,它只是My_struct。只有名字纔會改變。沒有其他的。 (實際上,在訪問權方面還存在一些其他差異,但它與所述問題並不直接相關)。

+0

如何? 「通常」的方式:通過在外部類中聲明一個數據成員My_struct my_struct;來「嵌套」數據。 – AnT 2010-06-20 18:03:02

+0

@strut您是否嘗試過使用我的答案中的代碼? – 2010-06-20 18:11:07

+0

@strut:我不知道你是如何使用它來獲得這樣的錯誤。你需要發佈代碼。按照我在上面的評論中提出的建議,不會導致編譯器出現任何錯誤。而且,當你在'My_Class'中時,你不需要使用全名'My_Class :: My_struct'。只需'My_struct'就足夠了。但'My_Class :: My_struct'也應該可以工作。 – AnT 2010-06-20 18:17:42

6

My_Class不包含My_struct,它只是定義它。如果您想要從My_Class以外創建My_struct實例,它將被稱爲My_Class::My_struct

爲了實際包括My_Class一個My_struct例如,你應該做的

struct My_Class{ 
    class My_struct{ 
    int am_i_in_class_or_struct; 
    }; 
    My_struct myStructInstance; 
};