How to initialize private static members in C++?

后端 未结 17 2269
忘掉有多难
忘掉有多难 2020-11-21 07:04

What is the best way to initialize a private, static data member in C++? I tried this in my header file, but it gives me weird linker errors:

class foo
{
           


        
17条回答
  •  太阳男子
    2020-11-21 07:16

    The class declaration should be in the header file (Or in the source file if not shared).
    File: foo.h

    class foo
    {
        private:
            static int i;
    };
    

    But the initialization should be in source file.
    File: foo.cpp

    int foo::i = 0;
    

    If the initialization is in the header file then each file that includes the header file will have a definition of the static member. Thus during the link phase you will get linker errors as the code to initialize the variable will be defined in multiple source files. The initialisation of the static int i must be done outside of any function.

    Note: Matt Curtis: points out that C++ allows the simplification of the above if the static member variable is of const int type (e.g. int, bool, char). You can then declare and initialize the member variable directly inside the class declaration in the header file:

    class foo
    {
        private:
            static int const i = 42;
    };
    

提交回复
热议问题