将值分配给类中的私有静态变量

时间:2016-05-31 18:57:43

标签: c++

我有一个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帖子,其中说明了如何访问静态成员。 Public static member of class 。能不能让我知道我的概念遗失在哪里?

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

3 个答案:

答案 0 :(得分:3)

定义时:

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

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

void A::modify_string() {

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

您的课程定义后还需要;

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

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

您在为问题提供的链接中已明确说明了这一点。

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

答案 1 :(得分:1)

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

通过写

来做到这一点
std::string A::s;

只有一个源文件。

答案 2 :(得分:0)

A.cpp中的定义void modify_string() {...}没有定义类的成员函数,它定义了一个具有相同名称的单独的全局函数。你可能意味着

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