初始化 std::string& 的私有类变量

initializing private class variable of std::string&

本文关键字:类变量 std string 初始化      更新时间:2023-10-16

如何在 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),如果不需要引用对象外部的字符串。