private:
const int variable;
ANSI C++ disallows(!) the initialization of the variable in the class
definition. So I *CANNOT* do this:
const int variable = 0;
Not a problem, I do it in the constructor like this:
Class::Constructor : variable (0)
{.....}
OK, so that works. Now, what if I have a constant array? For the same
reason as above I cannot do:
const int array[3] = {1, 2, 3};
Because I cannot initialize const members in my class definition. When I
try to compile this it tells me that ANSI C++ does not allow that.
So what do I do? I cannot do:
Class::Constructor : array ( {1,2,3} )
and I also cannot do
Class:Constructor : array[0] (1), array[1] (2), array[3] (3)
What can I do? I'm stuck. Thanks, please reply to my email address because
I might miss a reply on the newsgroup otherwise.
class Test
{
public:
static const int array[3];
};
const int Test::array[3] = { 1, 2, 3 };
Les
*** Reply email address: remove 'nospam-'... (Don't you just hate that
stuff?)
Jawed Karim wrote in message ...
Jawed Karim wrote in message ...
>I'm having a problem with constant class member variables. Let's say I
>have a class where I:
>
>private:
> const int variable;
>
>ANSI C++ disallows(!) the initialization of the variable in the class
>definition. So I *CANNOT* do this:
>
> const int variable = 0;
>
>Not a problem, I do it in the constructor like this:
>
>Class::Constructor : variable (0)
>{.....}
>
>OK, so that works. Now, what if I have a constant array? For the same
>reason as above I cannot do:
>
> const int array[3] = {1, 2, 3};
>
>Because I cannot initialize const members in my class definition. When I
>try to compile this it tells me that ANSI C++ does not allow that.
>So what do I do? I cannot do:
>
>Class::Constructor : array ( {1,2,3} )
>
>and I also cannot do
>
>Class:Constructor : array[0] (1), array[1] (2), array[3] (3)
>
And Les Matheson replied:
>Since your array is const, you can make it static also, and then you
>can initialize it just like any static array:
>class Test
>{
> public:
> static const int array[3];
>};
>const int Test::array[3] = { 1, 2, 3 };
But they are not the same thing, because a const data member
is not necessarily the same value across all instances of the
class, the way a static data member is.
There are a number of other alternatives, but the one
that comes to mind easily is to use the STL, where appropriate
constructors have been defined, unlike for plain-old arrays,
so you can do something like:
#include <iostream.h>
#include <vector.h>
class Test{
public:
Test(const vector<int> newArray):array(newArray){}
// stupid test function
const int getVal(int index) const {return array[index];}
private:
const vector<int> array;
};
main(int argc, char* argv[])
{
vector<int> initializationData;
for (int ii=0; ii<5; ii++)
initializationData.push_back(ii);
Test myTest(initializationData);
for (int ii=0; ii<5;ii++)
cout << "val " << ii<< " = " << myTest.getVal(ii) << endl;
}
And the constant data is instance-specific, if that is what was desired.
later,
jlp