C++ 对静态变量c+的未定义引用+;

C++ 对静态变量c+的未定义引用+;,c++,static,C++,Static,您好,我在以下代码中遇到未定义的引用错误: class Helloworld{ public: static int x; void foo(); }; void Helloworld::foo(){ Helloworld::x = 10; }; 我不想要一个静态的foo()函数。如何在类的非静态方法中访问类的静态变量 我不想要一个静态的foo()函数 嗯,foo()在您的类中不是静态的,您不需要将其设置为static来访问类的static变量 您需要做的只是

您好,我在以下代码中遇到未定义的引用错误:

class Helloworld{
  public:
     static int x;
     void foo();
};
void Helloworld::foo(){
     Helloworld::x = 10;
};
我不想要一个
静态的
foo()
函数。如何在类的非
静态
方法中访问类的
静态
变量

我不想要一个
静态的
foo()
函数

嗯,
foo()
在您的类中不是静态的,您不需要将其设置为
static
来访问类的
static
变量

您需要做的只是为静态成员变量提供定义:

class Helloworld {
  public:
     static int x;
     void foo();
};

int Helloworld::x = 0; // Or whatever is the most appropriate value
                       // for initializing x. Notice, that the
                       // initializer is not required: if absent,
                       // x will be zero-initialized.

void Helloworld::foo() {
     Helloworld::x = 10;
};

代码是正确的,但不完整。类
Helloworld
具有其静态数据成员
x
声明,但没有该数据成员的定义。你的源代码中有一些你需要的东西

int Helloworld::x;
或者,如果0不是合适的初始值,请添加初始值设定项。

旧问题,但是

由于
c++17
您可以声明
静态成员
内联成员
并在
的主体内实例化它们,而无需
类外定义:

class Helloworld{
  public:
     inline static int x = 10;
     void foo();
};

谢谢你,伙计。我正在实例化HelloWorld::x,但没有使用int。再次感谢。@AndyProwl我尝试了这一点,但在将x设置为0的行上出现了一个编译器错误。它说“类Helloworld”中的“foo”没有命名类型。有什么建议吗?
foo()
定义末尾的@ufmike分号导致错误。可能是重复的