how to initialize static references to an object, second attempt

B

Bram Kuijper

Okay, second try (since my posting on 4/27), to find a proper way to
initialize a static reference member to an object.

I try to initialize a static reference inside the class ga, referencing
to an instance of the class bla. According to a previous posting of
Zeppe on 4/27...
>
> 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.

Doing that, this is my code:

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

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

};

static bla v();

ga::ref = v;

int main()
{
ga();
return 0;
}

however, this still does not lead to any proper code, since the compiler
now complains by doing this:
test.cpp:23: error: expected constructor, destructor, or type conversion
before ‘=’ token
test.cpp:21: warning: ‘bla v()’ declared ‘static’ but never defined

what is the problem?

a. why can't I just declare bla v() as a static variable?
b. what is then the proper way of initializing ga::ref?
c. references such as the C++ annotations
(http://www.icce.rug.nl/documents/cplusplus/) or even stroustrup's book
are not that verbose on the topic of static reference members. Anyone
can point me towards some documentation on this matter?

thanks in advance,
Bram
 
N

Noah Roberts

Bram said:
a. why can't I just declare bla v() as a static variable?

You are declaring a function, not defining a variable. Try:
static bla v = bla(); or:
static bla v;
b. what is then the proper way of initializing ga::ref?

try:
bla & ga::ref = v;
 
S

siddhu

Okay, second try (since my posting on 4/27), to find a proper way to
initialize a static reference member to an object.

I try to initialize a static reference inside the class ga, referencing
to an instance of the class bla. According to a previous posting of
Zeppe on 4/27...

Doing that, this is my code:

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

};

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

};

static bla v();

This is declaration of static function v() which returns bla.
As per standard whatever looks like declaration is a declararion.
So change it to
static bla v;
And also define constructors and destructors of bla and ga.
Your code should work now.
 
S

siddhu

This is declaration of static function v() which returns bla.
As per standard whatever looks like declaration is a declararion.
So change it to
static bla v;
And also define constructors and destructors of bla and ga.
Your code should work now.










- Show quoted text -- Hide quoted text -

- Show quoted text -

also do this
bla& ga::ref = v; in place of ga::ref = v;
 
Z

Zeppe

Bram said:
Okay, second try (since my posting on 4/27), to find a proper way to
initialize a static reference member to an object. [...]
a. why can't I just declare bla v() as a static variable?

the code

static bla v();

defines a static function v() that returns a object of type "bla". In
order to define a static variable with the empty constructor you have to do

static bla v;
b. what is then the proper way of initializing ga::ref?

well, it's exactly in the piece of message that you quoted:

bla& ga::ref = v;

check it out!

Regards,

Zeppe
 

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,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top