2012-06-02 108 views
0

我在C++下面的代碼不編譯:類具有相同的類類型的成員

class Container; 
class Container 
{ 
    std::string m_Name; 
    Container m_Container; 
}; 

這是因爲我有相同的類型和編譯器的成員不能推斷的大小對象在這裏。

是什麼讓用C#這項工作?

namespace Sample 
{ 
    public class Container 
    { 
     public string m_Name; 
     public Container m_Container; 
    } 
} 

namespace Sample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Container con = new Container(); 

     } 
    } 
} 

這個在C#中編譯得很好。在這裏計算物體的大小如何?

+2

在C#中,你會遇到這種痛苦與結構。 'struct C {C c;例如''。 –

回答

9

,它工作在C#事實是,所有的對象都爲指針處理。也就是說,你的C#代碼就相當於這個C++代碼

class Container; 
class Container 
{ 
    std::string* m_Name; 
    Container* m_Container; 
}; 

指針的大小是已知的,因此一切編譯。根本不需要知道對象的大小。但是,你不想進去C++,特別是原始指針周圍扔三分球。

注意,在你原來的執行,對象的大小,不僅是未知的,但它也是無限的,因爲每個Container包含另一個Container其中包含另一個Container等等...

相關問題