关于c ++:为类中的私有静态变量赋值


Assign value to private static variable in a class

本问题已经有最佳答案,请猛点这里访问。

我有一个文件a.hpp,如下所示:

1
2
3
4
5
6
7
class A
{
private:
   static std::string s;
public:
   void modify_string();
};

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

1
2
3
4
5
6
#include"A.hpp"

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

我的主要课程:

1
2
3
4
5
int main()
{
A a;
a.modify_string();
}

我理解静态变量由所有类实例共享。我还浏览了这篇文章,上面说了如何访问静态成员。类的公共静态成员。你能告诉我我的概念在哪里缺失吗?

编辑:我得到这个错误:错误:未定义对a::s的引用


定义时:

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

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

1
void A::modify_string() {

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

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

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

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

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

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


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

写下来就行了

1
std::string A::s;

在一个源文件中。


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

1
2
3
4
void A::modify_string()
{
    s ="something";
}