Reputation: 152
I have this C++ program:
int box[9][9];
box = { {solution[0][0],solution[0][1],solution[0][2],solution[1][0],solution[1][1],solution[1][2],solution[2][0],solution[2][1],solution[2][2]},
{solution[0][3],solution[0][4],solution[0][5],solution[1][3],solution[1][4],solution[1][5],solution[2][3],solution[2][4],solution[2][5]},
{solution[0][6],solution[0][7],solution[0][8],solution[1][6],solution[1][7],solution[1][8],solution[2][6],solution[2][7],solution[2][8]},
{solution[3][0],solution[3][1],solution[3][2],solution[4][0],solution[4][1],solution[4][2],solution[5][0],solution[5][1],solution[5][2]},
{solution[3][3],solution[3][4],solution[3][5],solution[4][3],solution[4][4],solution[4][5],solution[5][3],solution[5][4],solution[5][5]},
{solution[3][6],solution[3][7],solution[3][8],solution[4][6],solution[4][7],solution[4][8],solution[5][6],solution[5][7],solution[5][8]},
{solution[6][0],solution[6][1],solution[6][2],solution[7][0],solution[7][1],solution[7][2],solution[8][0],solution[8][1],solution[8][2]},
{solution[6][3],solution[6][4],solution[6][5],solution[7][3],solution[7][4],solution[7][5],solution[8][3],solution[8][4],solution[8][5]},
{solution[6][6],solution[6][7],solution[6][8],solution[7][6],solution[7][7],solution[7][8],solution[8][6],solution[8][7],solution[8][8]}};
The error I get is:
error: assigning to an array from an initializer list
What does that mean?
Upvotes: 2
Views: 2035
Reputation: 153842
This C++ error:
error: assigning to an array from an initializer list
Is caused because you are trying to assign an array with an initializer which is not allowed. An initialization happens when the array is created and values pushed into it while it is created. An assignment happens when the array is already created and new values are placed in it. There is a difference between what you are allowed to do during initialization or assignment.
Here is the simplest code that causes the above error:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int myarray [] = {1,2,4};
myarray [] = {2,5,9};
//error, cannot assign with an initializer.
//You can't initialize an array that's already been initialized.
return 0;
}
If you want to force new values in there, try std::copy
:
int myarray [] = {1,2,3,4};
int newarray [] = {2,5,9,12};
//copy the first 4 elements from newarray into newarray
std::copy(newarray, newarray + 4, myarray);
for(int x = 0; x < 4; x++){
cout << myarray[x] << ",";
}
Which prints: 2,5,9,12,
But then you should be asking yourself why you are programming close to the metal like that.
consider using std::vector instead:
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv) {
vector<int> array;
cout << "size is: " << array.size() << endl;
array.push_back(42);
cout << "size is: " << array.size() << endl;
cout << "data items: " << array.at(0) << endl;
array.insert(array.begin(), 5);
array.insert(array.end(), 20);
cout << "size is: " << array.size() << endl;
int len = array.size();
for(int x = 0; x < array.size(); x++){
cout << "data item: " << array.at(x) << endl;
}
return 0;
}
Prints this:
size is: 0
size is: 1
data items: 42
size is: 3
data item: 5
data item: 42
data item: 20
Using a C++ vector to re-initialize a list:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int foobar[3] = {1, 2, 3};
std::vector<int> myvector(foobar, foobar + 3);
int moobar[3] = {4, 5, 6};
myvector.assign(moobar, moobar + 3);
for(int x = 0; x < 3; x++)
cout << myvector[x];
}
Upvotes: 1
Reputation: 21900
The initializer has to be used when declaring the variable:
int box[9][9]= { {solution[0][0],solution[0][1],solution[0][2],solution[1][0],solution[1][1],solution[1][2],solution[2][0],solution[2][1],solution[2][2]},
{solution[0][3],solution[0][4],solution[0][5],solution[1][3],solution[1][4],solution[1][5],solution[2][3],solution[2][4],solution[2][5]},
{solution[0][6],solution[0][7],solution[0][8],solution[1][6],solution[1][7],solution[1][8],solution[2][6],solution[2][7],solution[2][8]},
{solution[3][0],solution[3][1],solution[3][2],solution[4][0],solution[4][1],solution[4][2],solution[5][0],solution[5][1],solution[5][2]},
{solution[3][3],solution[3][4],solution[3][5],solution[4][3],solution[4][4],solution[4][5],solution[5][3],solution[5][4],solution[5][5]},
{solution[3][6],solution[3][7],solution[3][8],solution[4][6],solution[4][7],solution[4][8],solution[5][6],solution[5][7],solution[5][8]},
{solution[6][0],solution[6][1],solution[6][2],solution[7][0],solution[7][1],solution[7][2],solution[8][0],solution[8][1],solution[8][2]},
{solution[6][3],solution[6][4],solution[6][5],solution[7][3],solution[7][4],solution[7][5],solution[8][3],solution[8][4],solution[8][5]},
{solution[6][6],solution[6][7],solution[6][8],solution[7][6],solution[7][7],solution[7][8],solution[8][6],solution[8][7],solution[8][8]}};
Upvotes: 4