我有一个私人和公共成员的课程我正在尝试使用getter Get_Words()来访问私有单词成员。这个都是编译但是来自dir[NORTH].Get_Words() = "NORTH";
时的值每当这个单词只是一个没有使用dir[NORTh].word = "NORTH";
的Get_Words()成员函数的公共函数时
为什么Get_Words没有正确地将值分配给word?
class Words
{
public:
static void Set_Words();
string Get_Words();
private:
string word;
}
string Word::Get_Words()
{
return word;
}
...
dir[NORTH].Get_Word() = "NORTH";
我也试过
dir[NORTH].Get_Word() = Set_Word( string "North");
我很确定我做错了,但我是c ++中面向对象编程的新手,无法找到最好的方法。
答案 0 :(得分:2)
std::string Get_Word()
按值返回,也就是说它会复制该单词并将其返回。当您尝试分配给它时,您试图分配到右手参考,这是不可能的。
解决这个问题的方法是返回对word的引用:
std::string& Get_Word();
但这通常被认为是不好的做法,因为参考可以超过班级。更好的方法是在吸气剂旁边提供一个设定器:
void Set_Word(const std::string& w) {word=w;}
甚至更好:
template <typename T>
void Set_Word(T&& w) {word=std::foreward<T>(w);}
答案 1 :(得分:0)
要获取私有值,通常会实现公共get函数。
您想要设置值 - 通常为此任务实现公共集函数:
void Set_Word(string& newValue) { ... }
或者实施Getter作为返回参考,正如来自莫斯科的Vlad所说。