2012-02-16 87 views
1

在std ::陣列 即時編譯該代碼的std ::陣列C++ 11初始化語法錯誤​​

#include <iostream> 
#include <array> 

using namespace std; 

int main(int argc, char const *argv[]) 
{ 
    array<int, 5> myarr; 
    myarr = {1,5,2,3,4}; 

    for(auto i : myarr) 
    { 
     cout << i << endl; 
    } 

    return 0; 
} 

但它編譯時,當我做到這一點上得到

no match for ‘operator=’ in ‘myarr = {1, 5, 2, 3, 4}’ 

錯誤同一行

array<int, 5> myarr = {1,5,2,3,4}; 

如何在seprate行賦值

我需要在類構造函數中分配值我該怎麼做?

class myclass 
{ 
    myclass() 
    { 
    myarr = {1,2,3,4,5}; /// how to assign it // it gives errors 
    } 
}; 
+0

下面的答案適用於您確實需要在施工後分配數組,但實際上很少需要。對於構造函數,您可以並應該使用初始化列表而不是賦值,如C++常見問題解答中所述:http://www.parashift.com/c++-faq/init-lists.html。 – 2012-08-16 18:20:10

回答

6

而不是你需要兩個大括號。

myarray = {{1,2,3,4,5}}; 
-1

您需要一個臨時對象。

class myclass 
{ 
    myclass() 
    { 
    myarr = std::array<int,5>{1,2,3,4,5}; 
    } 
}; 

語法var = { values, ... }僅對初始值設定項有效。但是你在這裏做一個任務,而不是初始化。 C++ 11在這裏改變的是,你現在可以在任何類類型(在定義了合適的構造函數的地方)進行這種類型的初始化,然後它只在POD類型和數組上工作。

+2

「*之前它只適用於POD類型和數組*」不完全;之前它只在_aggregate_類型上工作。 – ildjarn 2012-02-16 16:50:17

+2

-1。錯誤。填料。 – 2012-02-16 18:06:35