Reputation: 653
After reading How to initialize an array in C, in particular:
Don't overlook the obvious solution, though:
int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
I tried something like this:
#include <iostream>
class Something {
private:
int myArray[10];
public:
Something() {
myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
}
int ShowThingy(int what) {
return myArray[what];
}
~Something() {}
};
int main () {
Something Thing;
std::cerr << Thing.ShowThingy(3);
}
And I get:
..\src\Something.cpp: In constructor 'Something::Something()':
..\src\Something.cpp:10:48: error: cannot convert '<brace-enclosed initializer list>' to 'int' in assignment
The obvious in this case is not so obvious. I really would like the initiation of my array to be more dynamic as well.
I tired:
private:
int * myArray;
public:
Something() {
myArray = new int [10];
myArray = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
}
This looked funky to me to, and so to the compiler:
..\src\Something.cpp: In constructor 'Something::Something()':
..\src\Something.cpp:11:44: error: cannot convert '<brace-enclosed initializer list>' to 'int*' in assignment
This also did not work:
private:
int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
with:
..\src\Something.cpp:6:20: error: a brace-enclosed initializer is not allowed here before '{' token
..\src\Something.cpp:6:51: sorry, unimplemented: non-static data member initializers
..\src\Something.cpp:6:51: error: 'constexpr' needed for in-class initialization of static data member 'myArray' of non-integral type
I have been doing really good and learning what does not work, but not so good learning what does work.
So, how do I used initialization lists {value, value, value} for an array inside a class?
I have been trying to figure out how to do this for some time now and am very stuck, I have a number of these kinds of lists I need to make for my app.
Upvotes: 18
Views: 108352
Reputation: 1
It is possible to initialize array values of the array in size the main function like this:
Array *arr2 []= {{1, 3, 5, 6, 7},20,5};
Upvotes: -1
Reputation: 109089
You need to initialize the array in the constructor initialization list
#include <iostream>
class Something {
private:
int myArray[10];
public:
Something()
: myArray { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }
{
}
int ShowThingy(int what) {
return myArray[what];
}
~Something() {}
};
int main () {
Something Thing;
std::cerr << Thing.ShowThingy(3);
}
..\src\Something.cpp:6:51: sorry, unimplemented: non-static data member initializers
C++11 also adds supports for inline initialization of non-static member variables, but as the above error message states, your compiler has not implemented this yet.
Upvotes: 28
Reputation: 18252
Unless I'm mistaken, the initializer list is only allowed for when the variable is initialized during declaration - hence the name. You can't assign an initializer list to a variable, as you're trying to do in most of your examples.
In your last example, you're trying to add static initialization to a non-static member. If you want the array to be a static member of the class, you could try something like this:
class Derp {
private:
static int myArray[10];
}
Derp::myArray[] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
If you want to add a class member, you could try making the static array const
and copy it into the member array in the constructor.
Upvotes: 1