Search code examples
c++constants

How to declare a static const char* in your header file?


I'd like to define a constant char* in my header file for my .cpp file to use. So I've tried this:

private:
    static const char *SOMETHING = "sommething";

Which brings me with the following compiler error:

error C2864: 'SomeClass::SOMETHING' : only static const integral data members can be initialized within a class

I'm new to C++. What is going on here? Why is this illegal? And how can you do it alternatively?


Solution

  • NB : this has changed since C++11, read other answers too

    You need to define static variables in a translation unit, unless they are of integral types.

    In your header:

    private:
        static const char *SOMETHING;
        static const int MyInt = 8; // would be ok
    

    In the .cpp file:

    const char *YourClass::SOMETHING = "something";
    

    C++ standard, 9.4.2/4:

    If a static data member is of const integral or const enumeration type, its declaration in the class definition can specify a constant-initializer which shall be an integral constant expression. In that case, the member can appear in integral constant expressions within its scope. The member shall still be defined in a namespace scope if it is used in the program and the namespace scope definition shall not contain an initializer.