如何访问类的静态成员?

新手上路,请多包涵

我开始学习 C++ 和 Qt,但有时我从书中粘贴的最简单的代码会导致错误。

我在带有 QtCreator IDE 的 Ubuntu 10.04 上使用 g++4.4.2 。 g++ 编译器语法和其他编译器有区别吗?例如,当我尝试访问静态成员时,总是会出错。

 #include <iostream>
using namespace std;
class A
{
   public:
      static int x;
      static int getX() {return x;}
};
int main()
{
   int A::x = 100; // error: invalid use of qualified-name 'A::x'
   cout<<A::getX(); // error: : undefined reference to 'A::x'
   return 0;
}

我认为它与 此处此处 声明的完全相同(不是吗?)。那么上面的代码有什么问题呢?

原文由 sorush-r 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 696
2 个回答

您已经很好地声明了静态成员,但没有在任何地方 定义 它们。

基本上你所说的“存在一些静态成员”,但永远不要为它留出一些内存,你需要:

 int A::x = 100;

在课堂之外的某个地方,而 不是 在 main 里面。

原文由 Flexo 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以在 static 成员前面使用 inline 自 c++ 17 起的关键字,以避免定义超出类范围。您的代码现在应该如下所示:

 #include <iostream>
using namespace std;
class A
{
   public:
      inline static int x;
      static int getX() {return x;}
};
int main()
{
   A::x = 100;    //Works now
   cout<<A::getX()<<'\n';
   return 0;
}

原文由 felix_1 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题