SRN
SRN

Reputation: 2455

std::array c++11 initializer syntax error

the std::array im getting

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

error when compiling this code

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

but it compiles when i do it on the same line

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

how to assign values on the seprate line

i need to assign values in the class constructor how can i do it ?

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

Upvotes: 1

Views: 1164

Answers (2)

Johannes Schaub - litb
Johannes Schaub - litb

Reputation: 506877

Instead of the one pair of braces you need two.

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

Upvotes: 6

Gunther Piez
Gunther Piez

Reputation: 30419

You need a temporary object.

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

The syntax var = { values, ... } is only valid for initializers. But you do an assignment here, not an initialization. What c++11 changed here is that you can do this type of initialization now for any class type (where the appropriate constructor is defined), before it worked only on POD types and arrays.

Upvotes: -1

Related Questions