I would like to be able to create a variable number of an object. So,
when there's a class Thing, instead of
Thing thing1, thing2, thing3
do like
cin >> nr;
for (x = 0; x < nr; x--)
{
Thing thing[x];
}
I tried but get errors. Is this possible anyway?
Yes, it is possible. Let's give you a short introduction.
There are two kinds of arrays under C++, one whose size is known at
compile time (IOW, the size is a constant that is put into the code)
and one kind where the size of the array depends on some input at run-
time (which is your case). While the first kind can be allocated in
the way you have tried ("Thing thing[x];", where x must be a
constant), the second kind can only be allocated using "new", for
example
Thing* thing = new Thing (x);
Note that arrays that are allocated with "new" must be released
manually by a matching call to "delete[]" (note that the empty
brackets are intentional).
The reason why this is so is rather complex and has to do with how the
compiler internally managed the memory (google for "heap versus
stack").
The solution that Leigh had posted in the other branch of this thread
is pretty much the standard way to work with arrays under C++.
On 28 Apr., Leigh Johnston wrote:
[snip]
std::cin >> nr;
std::vector<Thing> items(nr);
// do stuff with items
The class "vector" relieves you from having to manage the memory by
yourself. Note that "items" in above example is not an array but a
single object. This object will use an array internally (so
std::vector will perform the "new" and "delete[]" calls for you).
Apart from that, std::vector can do a lot more, such as re-allocating
the underlying array if necessary.
I'd suggest to try the "new"-allocated array first, so that you get an
understanding how arrays work under C++. Then you should replace this
with std::vector, since this is most reliable.
Regards,
Stuart