为类中的私有静态变量赋值
Assign value to private static variable in a class
我有一个文件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";
}
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板基类中的静态变量
- 类和静态变量
- 不同作用域中的静态变量和全局变量
- 静态变量声明和定义
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在类中继承静态变量?
- "local scope"中的 C++ 初始化静态变量
- 使用静态变量的递归调用的不同输出
- 复制文件流C++静态变量
- 跨模板化函数编译的静态变量
- C++编译器是否优化了顺序静态变量读取?
- C++,每个循环初始化一个新的静态变量
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- 程序如何知道静态变量是否需要初始化?
- 类外的静态变量实例化
- 无法解析静态变量
- 函数局部静态变量:从性能角度来看的优点/缺点
- 访问从 CPP 文件到其他头文件的静态变量