为什么这在C ++中无效?
class CLS
{
public:
static int X;
};
int _tmain(int argc, _TCHAR* argv[])
{
CLS::X=100;
return 0;
}
答案 0 :(得分:5)
可以在main中更改它们,就像在您的示例中一样,但您必须在全局范围内明确地为它们分配存储空间,如下所示:
class CLS
{
public:
static int X;
};
int CLS::X = 100; // alocating storage, usually done in CLS.cpp file.
int main(int argc, char* argv[])
{
CLS::X=100;
return 0;
}
答案 1 :(得分:5)
静态成员在全局范围内必须是INITIALIZED,而不是静态成员必须为其分配存储空间。
class CLS {
public:
static int X;
};
int CLS::X;
int _tmain(int argc, _TCHAR* argv[])
{
CLS::X=100;
return 0;
}
答案 2 :(得分:0)
一旦定义了静态数据成员,即使没有静态数据成员类的对象,它也存在。在您的示例中,即使已定义静态数据成员CLS :: X,也不存在类X的对象。
答案 3 :(得分:0)
static
成员不是类对象的一部分,但它们仍然是类范围的一部分。它们必须在类之外独立初始化,就像使用类作用域解析运算符定义成员函数一样。
int CLS::X=100;