Problem with code or gcc?

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Problem with code or gcc?

Kedzierski,  Artur CIV NAVSURFWARCENDIV CORONA
        Could anybody tell me if this is a valid C++ code or
a problem with GCC?

test_prog.cc:
#include <vector>
struct MyStruct {
        static const int CONST = 1;
};

int main() {
        std::vector<int> l;
        MyStruct z;
        l.push_back(z.CONST);
}


        I get an undefined reference to MyStruct::CONST when
I try to compile it.
        I appreciate any help.

        Artur Kedzierski

smime.p7s (5K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

RE: Problem with code or gcc?

Ryan Mansfield
http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.11


Regards,
 
Ryan Mansfield
 

-----Original Message-----
From: [hidden email] [mailto:[hidden email]] On
Behalf Of Kedzierski, Artur CIV NAVSURFWARCENDIV CORONA
Sent: Tuesday, September 27, 2005 9:40 AM
To: [hidden email]
Subject: Problem with code or gcc?

        Could anybody tell me if this is a valid C++ code or
a problem with GCC?

test_prog.cc:
#include <vector>
struct MyStruct {
        static const int CONST = 1;
};

int main() {
        std::vector<int> l;
        MyStruct z;
        l.push_back(z.CONST);
}


        I get an undefined reference to MyStruct::CONST when
I try to compile it.
        I appreciate any help.

        Artur Kedzierski
Reply | Threaded
Open this post in threaded view
|

RE: Problem with code or gcc?

Philippe Haution-2
In reply to this post by Kedzierski, Artur CIV NAVSURFWARCENDIV CORONA
Hello,

This is not a valid C++ code, you cannot define the
value of CONST inside the struct declaration.

A more correct code would be :

struct MyStruct {
 static const int CONST;
};

const int MyStruct::CONST = 1;

Regards,

PH

--- "Kedzierski, Artur CIV NAVSURFWARCENDIV CORONA"
<[hidden email]> a ?crit :

> Could anybody tell me if this is a valid C++ code
> or
> a problem with GCC?
>
> test_prog.cc:
> #include <vector>
> struct MyStruct {
> static const int CONST = 1;
> };
>
> int main() {
> std::vector<int> l;
> MyStruct z;
> l.push_back(z.CONST);
> }
>
>
> I get an undefined reference to MyStruct::CONST
> when
> I try to compile it.
> I appreciate any help.
>
> Artur Kedzierski
>



       

       
               
___________________________________________________________________________
Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger
T?l?chargez cette version sur http://fr.messenger.yahoo.com
Reply | Threaded
Open this post in threaded view
|

RE: Problem with code or gcc?

Kedzierski,  Artur CIV NAVSURFWARCENDIV CORONA
In reply to this post by Kedzierski, Artur CIV NAVSURFWARCENDIV CORONA
        Philippe and Ryan, thank You for your responses.
        One thing that I find it strange is that I can use
MyStruct::CONST in other ways without a problem:

MyStruct m;
int a = m.CONST
std::vector<int> v;
v.push_back(static_cast<int>(m.CONST));
if (b == m.CONST)
  ...

        However, only when I use 'v.push_back(m.CONST)', I
get a linker error. Shouldn't I get a linker error in
those other cases?


-----Original Message-----
From: Philippe Haution [mailto:[hidden email]]
Sent: Tuesday, September 27, 2005 7:13
To: Kedzierski, Artur CIV NAVSURFWARCENDIV CORONA; [hidden email]
Subject: RE: Problem with code or gcc?


Hello,

This is not a valid C++ code, you cannot define the
value of CONST inside the struct declaration.

A more correct code would be :

struct MyStruct {
 static const int CONST;
};

const int MyStruct::CONST = 1;

Regards,

PH

--- "Kedzierski, Artur CIV NAVSURFWARCENDIV CORONA"
<[hidden email]> a écrit :

> Could anybody tell me if this is a valid C++ code
> or
> a problem with GCC?
>
> test_prog.cc:
> #include <vector>
> struct MyStruct {
> static const int CONST = 1;
> };
>
> int main() {
> std::vector<int> l;
> MyStruct z;
> l.push_back(z.CONST);
> }
>
>
> I get an undefined reference to MyStruct::CONST
> when
> I try to compile it.
> I appreciate any help.
>
> Artur Kedzierski
>


       

       
               
________________________________________________________________________
___
Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo!
Messenger
Téléchargez cette version sur http://fr.messenger.yahoo.com

smime.p7s (5K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Problem with code or gcc?

John (Eljay) Love-Jensen
Hi Artur,

> Shouldn't I get a linker error in those other cases?

Not necessarily.

You won't get a linker error if the actual numeric value can be used "as
is", without referencing the variable it is associated with.  Consider it an
optimization of sorts.

If you really dislike this situation[1], you can use enum for your integer
constants in your struct.

[1] I actually PREFER coding like in your example.  But I know quite a few
C++ software engineers that prefer using enums for constants instead --
they'd claim there are "less surprises".  Both idioms will be supported by
C++ for a very long time.

Sincerely,
--Eljay