
On Sat, 13 Mar 2010 09:43:18 +0100
Olivier Tournaire
Thank you Steven,
2010/3/13 Steven Watanabe
AMDG
Olivier Tournaire wrote:
I am currently having problem with a static const class member (in a header only project):
// type.hpp template< typename Property > struct property_base { typedef Property type; };
struct some_type : property_base< uint32_t > { BOOST_STATIC_CONSTANT( type, first_value = 1 ); BOOST_STATIC_CONSTANT( type, second_value = 2 ); };
// main.cpp #include "type.hpp" ... int main(int argc, char** argv) { BOOST_CHECK_EQUAL( 1 , some_type::first_value ); }
This produces a link error (g++ 4.3.4): undefined reference to some_type::first_value. Everything is fine with visual ...
If I add const some_type::type some_type::first_value; after the struct definition, it compiles and links fine. However, would it produce a multiple definition link error in some cases? Could you please help?
Putting the definition in a header can indeed cause a multiple definition error. The definition needs to be in a cpp file.
Is there an other way to do that? I want the project to stay header only so I cannot introduce a cpp file. Are they some metaprogramming techniques that could lead to the same behavior?
Is "extern" what you are looking for? extern cons some_type::type some_type::first_value; Cheers, -- Manfred