无法初始化私有静态成员?

时间:2019-07-19 10:05:02

标签: c++ static initialization

我是c ++的新手(来自python)。根据{{​​3}},我不知道如何初始化私有静态成员。我必须在源文件中对其进行初始化,但是在源文件中,我尝试初始化3个地方

任何类或函数的1.out端->声明没有存储类或类型说明符

2。在函数(主)->(在第9行中声明)内部是不可访问的

3。在类的静态方法内->无效

我不知道为什么会出现链接错误:

error LNK2001: unresolved external symbol "private: static int I::i" (?i@I@@0HA)

在哪里初始化它?

#include <iostream>
#define print(x) std::cout << x << std::endl;


class I
{
private:
    static int i;
public:
    static int geti();
};
//I::i = 1; declaration has no storage class or type specifier


int main()
{
    //I::i = 1;  (declared at line 9) is inaccessible
    print(I::geti()); // linking error!
    return 0;
}


int I::geti()
{
    i = 1;
    return i;
}

2 个答案:

答案 0 :(得分:1)

您必须像

那样初始化
int I::i = 1;

函数外部

答案 1 :(得分:0)

在C ++ 17中:

class I
{
private:
    inline static int i = 1;
public:
    static int geti();
};

在C ++ 14/11中,如果您的值是常量表达式并且是不可变的:

class I
{
private:
    constexpr static int i = 1;
public:
    static int geti();
};

(如果I::i是ORD使用的,则可能仍需要在类外定义)。


任何标准:

class I
{
private:
    static int i;
public:
    static int geti();
};

int I::i = 1;