如何在我的c ++类中初始化我的私有变量?
A.H:
class A {
private:
std::string& name;
public:
A(void);
~A(void);
bool load(std::string& name);
};
a.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中)初始化它,但它仍然是错误的。
答案 0 :(得分:3)
让我们先修复默认构造函数:你不能用赋值来初始化引用。它们需要使用初始化列表进行初始化:
static string empty_name("");
A::A(void) : name (empty_name) {
}
请注意使用empty_name
变量,作用于翻译单元。这允许您将引用成员初始化为某个对象。
就load
成员函数而言,在创建引用后无法重新分配引用。如果您需要此功能,最好的办法是在需要访问外部std::string
对象时使用指针替换引用,或者如果不需要引用则使用副本(即std::string name
)替换引用一个对象外部的字符串。