我有一个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的未定义引用
答案 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";
}