我是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;
}
答案 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;