2013-03-25 95 views
-8

我在C++中,IDE是Visual Studio 2012.我不知道爲什麼我不能這樣做,它根本沒有意義。正如標題所說,我試圖在類中放置一個結構,但它不會讓我這樣做。我試着把它放在公共,私人,受保護的地方,然後嘗試把它放在全球範圍內,沒有任何工作。在類中使用struct時的錯誤

class foobar 
{ 
public: 
    struct foo 
    { 
     int ass; 
    }; 

    foo bar; 
    bar.ass = 1; //getting a weird error on this line 
}; 

如何將一個結構放在類中?感謝您的幫助

+2

什麼是「奇怪的錯誤」? – 2013-03-25 23:55:28

+6

總有一個原因;在這種情況下,這是_you_做錯了。需要調整姿態。 – 2013-03-26 00:19:35

+0

難道是你的賦值語句不在函數或方法中嗎? – 2013-03-26 01:55:48

回答

9

如果你正在嘗試做的是在C++ 11構造類型foo,然後的對象時,你可以做ass成員初始化爲1是這樣:

class foobar 
{ 
public: 

    struct foo 
    { 
     int ass = 1; 
    //   ^^^ 
    }; 

    foo bar; 
}; 

你可以看到一個live example here

上述語法等同於更詳細的基於構造函數的初始化,這是在唯一選擇C++ 03(也可能是在附帶VS2012,這是VC11編譯器的版本已知爲not being fully compliant with the C++11 Standard):

class foobar 
{ 
public: 

    struct foo 
    { 
     foo() : ass(1) { } 
    //  ^^^^^^^^ 

     int ass; 
    }; 

    foo bar; 
}; 
5

C++不允許在類聲明中初始化變量。你必須寫一個構造函數來做到這一點。

+0

哈,謝謝。我不知道你不能在課堂上做到這一點,我不知道爲什麼C++的設計師會這麼做,但是謝謝你告訴我。 – 2013-03-26 00:09:34

+2

幾個原因,所有這些都是有意義的,並且超出了本評論主題的範圍。有趣的故事:語言設計師比你更聰明。 – 2013-03-26 00:20:34

+0

@JBentley是的,我想這就是爲什麼語言從未真正起飛過,呵呵?順便說一句,等不及用你的。 – 2013-03-26 00:21:49