为类中的私有静态变量赋值

Assign value to private static variable in a class

本文关键字:静态 变量 赋值      更新时间:2023-10-16

我有一个文件A.hpp是这样的:

class A
{
private:
   static std::string s;
public:
   void modify_string();
};

我在文件 A 中实现这一点.cpp如下所示:

#include "A.hpp"
void A::modify_string()
{
s = "something";  // Error here. 
}

我的主要课程:

int main()
{
A a;
a.modify_string();
}

我知道静态变量由所有类实例共享。我还浏览了这篇 SO 帖子,其中说明了如何访问静态成员。类的公共静态成员。你能告诉我我的概念在哪里缺失吗?

编辑:我收到此错误:错误:未定义对 A::s 的引用

当您定义:

void modify_string() {
    s = "something";  // Error here. 
}

您正在创建一个新函数,而不是定义类A的成员函数modify_string。您需要做:

void A::modify_string() {

通知编译器您正在为类 A 定义成员函数modify_string


在类定义之后,还需要一个;


最后,变量s是静态的,因此需要在某处单独定义它,以便链接器可以找到对它的引用。所以添加:

 std::string A::s = "default";

这在您为问题提供的链接中已明确描述。


下面是一个工作示例:http://ideone.com/iQ6Kux

您需要在一个编译单元中为 s 保留存储。

通过写作来做到这一点

std::string A::s;

在一个源文件中。

您在 A.cpp 中的定义void modify_string() {...}不是定义类的成员函数,而是定义一个具有相同名称的单独全局函数。 你可能的意思是

void A::modify_string()
{
    s = "something";
}