2012-09-05 53 views
-3

我有一個類中的類..怎樣纔可以有結構

class myClass 
{ 
public: 
    myClass(int time); 
} 

然後,我需要有結構內這個類。

class TopClass 
{ 
public: 
    typedef struct{ 
    int myint; 
    myClass myclass; 
    }tStruct; 

    tStruct sStruct1; 
    tStruct sStruct2; 

} 

我該怎麼辦?我怎樣才能調用myClass的構造函數? 只有使用類而不是struct的方法嗎?

我的構造

TopClass::TopClass():    
     sStruct1({32, myClass(100)}), 
     sStruct2({52, myClass(1000)}) 
{ 

} 

但我得到的錯誤:

extended initializer lists only available with -std=c++0x or -std=gnu++0x

+2

它有什麼問題? – SingerOfTheFall

+1

這是不是很清楚你在找什麼。 –

+0

實際問題是什麼?你有什麼錯誤嗎? – juanchopanza

回答

1

您可以添加構造函數的結構:http://ideone.com/ifBw2

class TopClass 
{ 
public: 
    struct tStruct { 
    tStruct(int time, int k = 0): myint(k), myclass(time) {} 
    int myint; 
    myClass myclass; 
    }; 

    TopClass(int t): sStruct1(t), sStruct2(t) {} 

    tStruct sStruct1; 
    tStruct sStruct2; 

}; 

編輯

至於新的問題 - 你必須使用新的標準(-std=c++0x)做這種方式。在舊標準中,你必須添加顯式的ctor來初始化成員變量。 C++中的structclass幾乎完全相同 - 您可以添加ctors,成員函數,靜態函數。唯一的區別是默認的隱私 - 公衆structprivateclass

class A { 
public: 
    int b; 
}; 

是完全一樣的

struct A { 
    int b; 
}; 
+0

謝謝!也許並不明顯,我正在尋找,但你的答案正是我想要的! – Meloun

1

How can I do it? How can I call constructors for myClass?

struct需要一個構造函數,因爲它沒有默認構造函數的成員。爲了有一個構造函數,它也需要自己的名字,而不僅僅是一個typedef別名。

struct tStruct { 
    // If you want a default constructor: 
    tStruct() : myClass(42) {} 

    // If you want to specify the time: 
    tStruct(int time) : myClass(time) {} 

    int myint; 
    myClass myclass; 
}; 

Is only way to use class instead of struct?

classstruct意味着什麼(除了有不同的默認訪問說明的未成年人的區別)同樣的事情。你可以用一個做什麼,你可以用另一個做。

0

事實上,帕維爾Zubrycki的回答是沒事的。

但我想知道爲什麼你必須這樣做,你必須在TopClass中導入另一個類的構造函數。

I mean that the code should follow the rule of high cohesion and low coupling. In software construction we’d rather prefer the composition (an important design mode) to a class defination in it. Something like the following code.

class B{ 
public: 
    B(int y){b = y;} 
private: 
    int b; 
}; 

class A { 
public: 
    A(int x):b(x){...}; 
private: 
    B b; 
}; 

從代碼中,我們可以最大限度地B類並顯着降低了A類的複雜& B可全由自己改變。