By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,412 Members | 1,006 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,412 IT Pros & Developers. It's quick & easy.

how to initialize static references to an object?

P: n/a
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::operator=(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;
}

Apr 27 '07 #1
Share this Question
Share on Google+
4 Replies


P: n/a
Bram Kuijper wrote:
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::operator=(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

return 0;
}
Apr 27 '07 #2

P: n/a
On 428, 12ʱ56, Bram Kuijper <a.l.w.kuij....@rug.nlwrote:
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::operator=(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;

}

Apr 27 '07 #3

P: n/a
SimpleCode wrote:
/////////////////////////////////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::operator=(const bla&)

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

Regards,

Zeppe
Apr 27 '07 #4

P: n/a
On 428, 1ʱ34, Zeppe <zeppe.remove.all.this.long.comm...@email.it>
wrote:
SimpleCode wrote:
/////////////////////////////////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::operator=(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.

Apr 27 '07 #5

This discussion thread is closed

Replies have been disabled for this discussion.