2013-04-17 96 views
1
#include <iostream> 

struct people 
{ 
    int id; 
} person; // that part 

int main() 
{ 
    person = {3}; 
    std::cout << person.id; 

    return 0; 
} 

我想問你初始化結構(好吧,不是初始化...創建結構類型......我真的不知道你怎麼稱呼它)。一旦我在結構之後看到了一些關鍵字,就像這裏的「人物」一樣。全部沒有任何typedef。在結構類型之後定義結構變量

我做了一點研究,發現它用來直接在結構之後定義一個變量。

但是,我上面發佈的代碼沒有編譯 - 它表示語法錯誤,缺少分號和廢話,因此表示該表達式無效。

這是什麼用,以及如何使用它?

+2

您可以發佈確切的錯誤我ssage?你使用哪種編譯器? –

+0

Visual Studio 2012,語法錯誤'{',缺少';'在'{'之前,期望表達式 - main()的第一行中的所有內容。 – user2252786

+0

你的代碼編譯時沒有警告,並且使用'g ++'編譯器和'-std = C++ 0x'標誌運行。 –

回答

7

在正常分配您不能使用結構初始化語法來處理,它有

struct people 
{ 
    int id; 
} person = { 3 }; 

如果你有一個C++ 11兼容的編譯器,你可以使用uniform initialization語法副本後來雖然:當你聲明的變量來實現

person = people { 3 }; 
2
struct people 
{ 
    int id; 
} person; // that part 

人是類型爲people的全局對象。

person = {3}; 

在C++ 03是不正確和糾正C++ 11,因爲{3}會像people{3}

0

一旦我見過的結構後,一些關鍵詞,如「人」在這裏。

這不是關鍵字,它是一個名稱。如果您願意,您可以在定義類型的同一語句中聲明類類型的變量。這相當於兩個獨立的聲明:

struct people 
{ 
    int id; 
}; 
people person; 

然而,我的代碼張貼以上不編譯

這聽起來像你或者編譯器不支持C++ 11(具體而言,來自支撐列表的分配),或者您正在編譯時禁用它。

如果您不能使用C++ 11,那麼你就必須分配單獨的每個成員:從

// person = {3}; // C++11 only 
person.id = 3; 

或聲明並初始化一個本地對象和分配:

people temp = {3}; 
person = temp; 

或初始化它在其聲明,而不是推遲,直到main

struct people 
{ 
    int id; 
} person = {3};