为什么静态成员必须在 main() 之外初始化?

发布于 2024-10-08 10:27:21 字数 160 浏览 3 评论 0原文

为什么这在 C++ 中无效?

class CLS
{
public:
    static int X;
};

int _tmain(int argc, _TCHAR* argv[])
{
    CLS::X=100;
    return 0;
}

Why is this invalid in C++?

class CLS
{
public:
    static int X;
};

int _tmain(int argc, _TCHAR* argv[])
{
    CLS::X=100;
    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

如若梦似彩虹 2024-10-15 10:27:21

它们可以在 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;
}

They can be changed inside of main, like in your example, but you have to explicitely allocate storage for them in global scope, like here:

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;
}
残花月 2024-10-15 10:27:21

并不是静态成员必须在全局范围内初始化,而是静态成员必须为其分配存储空间。

class CLS {
public:
  static int X;
};

int CLS::X;

int _tmain(int argc, _TCHAR* argv[])
{
  CLS::X=100;
  return 0;
}

It isn't that the static member must be INITIALIZED at global scope, but rather that the static member must have storage allocated for it.

class CLS {
public:
  static int X;
};

int CLS::X;

int _tmain(int argc, _TCHAR* argv[])
{
  CLS::X=100;
  return 0;
}
情话难免假 2024-10-15 10:27:21

一旦定义了静态数据成员,即使静态数据成员的类的对象不存在,它也存在。在您的示例中,即使已定义静态数据成员 CLS::X,也不存在类 X 的对象。

Once you define a static data member, it exists even though no objects of the static data member's class exist. In your example, no objects of class X exist even though the static data member CLS::X has been defined.

如歌彻婉言 2024-10-15 10:27:21

static 成员不是类对象的一部分,但它们仍然是类范围的一部分。它们必须在类外部独立初始化,就像使用类作用域解析运算符定义成员函数一样。

int CLS::X=100;

static members aren't part of class object but they still are part of class scope. they must be initialized independently outside of class same as you would define a member function using the class scope resolution operator.

int CLS::X=100;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文