2012-06-02 54 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等等...

相关问题