Connecting Tech Pros Worldwide Forums | Help | Site Map

how to initialize static references to an object?

Bram Kuijper
Guest
 
Posts: n/a
#1: Apr 27 '07
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;
}


Zeppe
Guest
 
Posts: n/a
#2: Apr 27 '07

re: how to initialize static references to an object?


Bram Kuijper wrote:
Quote:
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.
Quote:
ga();
~ga();
>
};
>
Quote:
>
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

Quote:
return 0;
}
>
SimpleCode
Guest
 
Posts: n/a
#3: Apr 27 '07

re: how to initialize static references to an object?


On 4ÔÂ28ÈÕ, ÉÏÎç12ʱ56·Ö, Bram Kuijper <a.l.w.kuij....@rug.nlwrote:
Quote:
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;

}

Zeppe
Guest
 
Posts: n/a
#4: Apr 27 '07

re: how to initialize static references to an object?


SimpleCode wrote:
Quote:
/////////////////////////////////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
SimpleCode
Guest
 
Posts: n/a
#5: Apr 27 '07

re: how to initialize static references to an object?


On 4ÔÂ28ÈÕ, ÉÏÎç1ʱ34·Ö, Zeppe <zeppe.remove.all.this.long.comm...@email.it>
wrote:
Quote:
SimpleCode wrote:
Quote:
/////////////////////////////////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.

Closed Thread