初始化 std::string& 的私有类变量
initializing private class variable of std::string&
如何在 c++ 类中初始化我的私有变量?
啊:
class A {
private:
std::string& name;
public:
A(void);
~A(void);
bool load(std::string& name);
};
答.cpp:
#include <string>
#include "a.h"
A::A(void) {
this->name = "";
}
A::~A(void) {}
bool A::load(std::string& name) {
this->name = name;
}
错误:
a.cpp: In constructor ‘A::A()’:
a.cpp:3:1: error: uninitialized reference member in ‘std::__cxx11::string& {aka class std::__cxx11::basic_string<char>&}’ [-fpermissive]
A::A(void) {
^
In file included from a.cpp:2:0:
a.h:3:22: note: ‘std::__cxx11::string& A::name’ should be initialized
std::string& name;
我已经在我的构造函数中初始化了它(在 a.cpp 中),但它仍然出错。
让我们先修复默认构造函数:不能使用赋值初始化引用。它们需要使用初始值设定项列表进行初始化:
static string empty_name("");
A::A(void) : name (empty_name) {
}
请注意使用empty_name
变量,范围限定为翻译单元。这使您可以初始化某个对象的引用成员。
就load
成员函数而言,无法在创建引用后重新分配引用。如果需要此功能,最好的办法是将引用替换为指针(如果需要访问外部std::string
对象)或副本(即std::string name
),如果不需要引用对象外部的字符串。
相关文章:
- 查找后更改类变量
- 如何比较自定义类的std::变体
- 如何避免在仅标头库中C++类/变量重定义
- c++ 在非类函数中使用类变量
- 基于模板的类变量
- 指向基类派生类的 std::unique_ptr 的指针
- 重载 + 自己的类和 std::string 的运算符
- 分段 访问私有类变量时出错
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 创建一个没有复制构造函数的类的 std::vector 的 std::vector
- 标准::在双类和类的 std::p air 上更大
- 对自定义类使用 std::hash<uint64_t>
- 访问 std:vector 的类成员 std:vector 在一个类中与另一个 std:vector
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 初始化 std::string& 的私有类变量
- C 类变量STD ::功能具有默认功能,并且可以更改
- 我应该<T>在我的类的 std::vector 成员变量中使用 std::unique_ptr 吗?
- 定义静态常量 std::string 类变量
- 从std::thread访问类变量
- 堆栈周围的变量被破坏-添加简单类到std::vector