2015-10-17 68 views
-1
#include <iostream> 
using namespace std; 

int main() 
{ 
    struct naming 
    { 
     int numline; 
     string numname; 
    } naming = {{1,"ONE"},{2,"TWO"}}; 
    cout<<naming.numline<<":"<<naming.numname<<std::endl; 
return 0; 
} 

發生此錯誤一個結構:Initialializing與預定義的值

main.cpp:10:33: error: braces around scalar initializer for type int 
} naming = {{1,"ONE"},{2,"TWO"}};            
+1

你期望的代碼呢? – juanchopanza

+0

固定。 thuan juanchopanza發現命名[]是正確的,不僅僅是命名。使用@ C0smo回覆中給出的數組索引訪問元素。謝謝。 –

回答

1

你有

struct naming { … } naming = … 

,這意味着你要創建一個單一的naming對象。但是您的初始化程序

{{1,"ONE"},{2,"TWO"}} 

與該意圖不符。

看起來像是在嘗試初始化一組naming對象。如果是這樣的話,你應該讓一個std::vector<naming>而不是單個對象:

struct naming { … }; // definition of naming 
std::vector<naming> namings = {{1, "ONE"}, {2, "TWO"}}; // collection of objects 

然後你就可以訪問像這樣的單個命名對象:

// access the first element: 
std::cout << namings.at(0).numline << ":" << namings.at(0).numname << std::endl; 
// access the second element: 
std::cout << namings.at(1).numline << ":" << namings.at(1).numname << std::endl; 
1

由於要存儲兩個值,則必須創建結構類型的陣列。

#include <iostream> 
using namespace std; 

int main() 
{ 
    struct naming 
    { 
     int numline; 
     string numname; 
    } naming[] = {{1,"ONE"},{2,"TWO"}}; 
    cout<<naming[0].numline<<":"<<naming[0].numname<<std::endl; 
    cout<<naming[1].numline<<":"<<naming[1].numname<<std::endl; 
    return 0; 
} 
+0

在我腦海中的編譯器中工作。謝謝! @zenith解決方案也非常好。 zenith的是我將要使用的,因爲我不想硬編碼,只有兩個元素在命名[]中。 –