Re: Problem with initialization of array of class objects
yatko wrote:
I want to define an array of objects and initialize them, but I don't
know how I could do that simply. I have searched over net, and have
found a few solutions. Does anybody has a better, simple solution?
Suppose there is a Foo class that has const member.
class Foo
{
public:
Foo(int, int);
~Foo();
private:
const int ID;
double int var;
There is no such type as "double int".
};
First method:
Foo objects [MAX] = {Foo(0,1),Foo(1,2),Foo(2,3)};
// This one requires copy constructor, but I have const members, so it
doesn't work for me.
Why is that? Does the compiler complain? (beyond 'double int', I mean)
Second method:
std::vector<Foo> objects;
objects[0] = * (new Foo(0,1));
objects[1] = * (new Foo(1,2));
objects[2] = * (new Foo(2,3));
//This one solves problem of const members, but I dont want to use
vector.
No, it does not solve the "problem of const members". Putting your
objects in a vector requires the presence of the copy constructor
as well. Not to mention that you need to use 'push_back' instead of
assigning since elements objects[i] do not exist unless you give the
vector some substance (and declaring it does not give substance, not
even empty space). Not to mention a memory leak (actually three
memory leaks).
I want to initialize the array as following, but it doesn't work.
Foo objects[MAX] = {{0,1},{1,2},{2,3}};
Correct. Brace-enclosed initialisers don't work for classes with
parameterized constructors like yours.
You might want to consider generating IDs from a static function;
that way you don't have to provide any and the constructor that takes
one argument could get/generate the ID automatically.
Also, please get into the habit of stating the *requirements*, not
showing non-working solutions, if you want help in class design.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask