Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > initialize static structured variable challenge

Reply
Thread Tools

initialize static structured variable challenge

 
 
wim delvaux
Guest
Posts: n/a
 
      06-23-2004
Hi all,

I want to initialize two structures with pointers
to eachother

static StructA VarA = { PtrToVarB };
static StructB VarB = { PtrToVarA };

A solution that WORKS in C (using gcc 3.3) is

static StructA VarA; // defining VarA
static StructB VarB; // defining VarB

and then

static StructA VarA = { &VarB };
static StructB VarB = { &VarA };

However in C++ (same gcc version) it does not work because
the first static is not assumed to be tentative.

How can I solve this problem ? Initializing using
functions is not possible since the above code is
generated automatically by some compiler

W


 
Reply With Quote
 
 
 
 
Gianni Mariani
Guest
Posts: n/a
 
      06-23-2004
wim delvaux wrote:
> Hi all,
>
> I want to initialize two structures with pointers
> to eachother
>
> static StructA VarA = { PtrToVarB };
> static StructB VarB = { PtrToVarA };
>
> A solution that WORKS in C (using gcc 3.3) is
>
> static StructA VarA; // defining VarA
> static StructB VarB; // defining VarB
>
> and then
>
> static StructA VarA = { &VarB };
> static StructB VarB = { &VarA };
>
> However in C++ (same gcc version) it does not work because
> the first static is not assumed to be tentative.
>
> How can I solve this problem ? Initializing using
> functions is not possible since the above code is
> generated automatically by some compiler


namespace
{
extern StructA VarA;
extern StructB VarB;

StructA VarA = { &VarB };
StructB VarB = { &VarA };
};

I didn't test it, but the above should compile. Note that the "extern"
in an anonymous namespace has about the same meaning as static.
 
Reply With Quote
 
 
 
 
wim delvaux
Guest
Posts: n/a
 
      06-23-2004
namespace {
typedef struct x_s {
int x;
} x_t;

extern x_t X1;
extern x_t X2;

static x_t X1 = { &X2 };
static x_t X2 = { &X1 };
}

Compiled above code ...

u19809@buro:.../tmp$ c++ --version
c++ (GCC) 3.3.3 (Debian 20040417)
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Result :

u19809@buro:.../tmp$ c++ t.c -o t++
t.c:9: error: `<unnamed>::X1' was declared `extern' and later `static'
t.c:6: error: previous declaration of `<unnamed>::X1'
t.c:9: error: invalid conversion from `<unnamed>:_t*' to `int'
t.c:10: error: `<unnamed>::X2' was declared `extern' and later `static'
t.c:7: error: previous declaration of `<unnamed>::X2'
t.c:10: error: invalid conversion from `<unnamed>:_t*' to `int'



 
Reply With Quote
 
Buster
Guest
Posts: n/a
 
      06-23-2004
wim delvaux wrote:

What you tried is totally different from what Gianni suggested.
The 'static' keyword has managed to sneak back in. I compiled
the following, as a complete translation unit. There were no
errors on GCC 3.3.1, MSVC 7.1 or BCB 6.0.

namespace
{
struct StructB;
struct StructA { StructB * p; };
struct StructB { StructA * p; };

extern StructA VarA;
extern StructB VarB;

StructA VarA = { &VarB };
StructB VarB = { &VarA };
};

void f()
{
StructA a;
StructB b;
}

--
Regards,
Buster.
 
Reply With Quote
 
wim delvaux
Guest
Posts: n/a
 
      06-23-2004
Ah ok,

one thing I am afraid of is that VarA and VarB should remain local
variables (i.e. not cause nameclashes in other modules).

Does the use of the anonymous namespace imply that the vars are hidden for
all other source files ?

W
 
Reply With Quote
 
Gianni Mariani
Guest
Posts: n/a
 
      06-23-2004
wim delvaux wrote:
> Ah ok,
>
> one thing I am afraid of is that VarA and VarB should remain local
> variables (i.e. not cause nameclashes in other modules).
>
> Does the use of the anonymous namespace imply that the vars are hidden for
> all other source files ?


yes - (modulo compiler bugs).
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
initialize static member variable markww C++ 6 08-26-2006 07:07 PM
"Semantic, Structured Authoring: The Challenge for Technical Writers" Scott Abel XML 0 07-05-2006 03:54 PM
if instance variable get initialize after assigning some values or after constructor then when does static variable get initialize Tony Morris Java 3 02-04-2006 08:39 AM
how to initialize a class static member variable of composite type Nan Li C++ 7 11-09-2005 10:02 PM
where to initialize a static class variable lou zion C++ 8 06-09-2005 09:18 PM



Advertisments