std :: array c ++ 11 синтаксическая ошибка инициализатора - PullRequest
1 голос
/ 16 февраля 2012

ошибка std :: array im получать

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

как назначить значения в отдельной строке

мне нужно назначить значения в конструкторе класса, как я могу это сделать?

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

Ответы [ 2 ]

6 голосов
/ 16 февраля 2012

Вместо одной пары скобок вам нужно две.

myarray = {{1,2,3,4,5}};
0 голосов
/ 16 февраля 2012

Вам нужен временный объект.

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

Синтаксис var = { values, ... } действителен только для инициализаторов. Но вы делаете здесь задание, а не инициализацию. Что изменилось в C ++ 11, так это то, что вы можете выполнить этот тип инициализации сейчас для любого типа класса (где определен соответствующий конструктор), прежде чем он работал только с типами POD и массивами.

...