Z
Zeppe
Bram said:Hi all,
as a C++ newbie, I got some question on the initialization of static
reference data members.
Since it isn't possible to initialize static members of a class in the
constructor, I should initialize them in advance. However, the following
code, in which I first produce two classses and then try to assign a
reference of the first class to a static data member of the second class
doesn't work. It gives the following compiler error:
error: no match for ‘operator=’ in ‘ga::ref = v’
note: candidates are: bla& bla:perator=(const bla&)
Since I don't wanna go into operator overloading for something this
simple, how should I properly initialize a static member referencing to
an object?
cheers,
Bram
here is my code:
class bla
{
public:
bla();
~bla();
};
class ga
{
public:
static bla &ref;
pay attention with static member references, because of the
initialization order. The static variables are initialized when the
program is started, and the order of initialization is very important.
ga();
~ga();
};
int main()
{
bla v();
ga::ref = v;
this is a quite serious error. ga::ref is created when you first run the
program, before the main is executed. Then you are only assigning v to
an unbinded reference.
you should initialize ga::ref outside of any function, like
bla& ga::ref = v;
but v should be a static variable istantiated before in the same
transactional unit, or the result of a function.
If you want a shared object that you can change over time, you may want
to use a pointer instead of a reference.
Regards,
Zeppe