2012-02-16 3 views
1

БППП :: массив им получитьстанд :: массив ошибок C++ 11 инициализатора синтаксис

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

ошибку при компиляции этого кода

#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; 
} 

но компилирует, когда я это сделать на та же линия

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

Ответы ниже работают, когда вам действительно нужно назначить массив после постройки, но это на самом деле редко необходимо. Для конструкторов вы можете и должны использовать список инициализации вместо назначения, как указано в FAQ по C++ на http://www.parashift.com/c++-faq/init-lists.html. –

ответ

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

+2

-1. неправильно. Наполнитель. –

Смежные вопросы