how to initialize static references to an object?

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::eek: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
 
B

Bram Kuijper

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::eek: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;
ga();
~ga();

};



int main()
{
bla v();
ga::ref = v;
return 0;
}
 
S

SimpleCode

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::eek: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;
ga();
~ga();

};

int main()
{
bla v();
ga::ref = v;
return 0;}

class bla
{
public:
bla();
~bla();



};


class ga
{
public:
static bla &ref;
ga();
~ga();


};
/////////////////////////////////add this line
bla ga::&ref;

int main()
{
bla v();
ga::ref = v;
return 0;

}
 
Z

Zeppe

SimpleCode said:
/////////////////////////////////add this line
bla ga::&ref;

to add another error:

../testtraing.cpp:21: error: expected unqualified-id before ¡®&¡¯ token
../testtraing.cpp: In function ¡®int main()¡¯:
../testtraing.cpp:26: error: no match for ¡®operator=¡¯ in ¡®ga::ref = v¡¯
../testtraing.cpp:4: note: candidates are: bla& bla::eek:perator=(const bla&)

fortunately id doesn't compile, because it would have been wrong, as I
explained.

Regards,

Zeppe
 
S

SimpleCode

to add another error:

./testtraing.cpp:21: error: expected unqualified-id before '&' token
./testtraing.cpp: In function 'int main()':
./testtraing.cpp:26: error: no match for 'operator=' in 'ga::ref = v'
./testtraing.cpp:4: note: candidates are: bla& bla::eek:perator=(const bla&)

fortunately id doesn't compile, because it would have been wrong, as I
explained.

Regards,

Zeppe

Thanks Zeppe.
I got a serious mistake.It shoud "bla & ga::ref;"
But it is another mistake.
As you said,
"
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.
but v should be a static variable istantiated before in the same
transactional unit, or the result of a function.
"
Thank you.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,236
Members
46,825
Latest member
VernonQuy6

Latest Threads

Top