const string& mtm::RadioManager::getBestSong() const {
string& most_popular_song=tmp.getName();
most_popular_song = current_song.getName();
return most_popular_song;
}
string mtm::Song::getName() const {
return this->song_name;
}
class Song {
string song_name;
public:
string getName() const;
}
我收到此错误:
从'std :: string '类型的右值开始,无效初始化'std :: string&{aka std :: basic_string&}'类型的非const引用
我无法使它成为 const string& most_popular_song=tmp.getName();
因为我将其更改为 tmp.getName();
返回 string
!我该怎么做才能摆脱这个错误?
1 回答
函数
getName
不提供对类的基础song_name
字段的修改访问 . 无论你做什么,都不能通过getName
(如所写的那样)改变song_name
. 这是让getName
返回song_name
字段副本的重点 .因此,通过非常量引用接收结果毫无意义 . 无论如何你无法改变它 . 即使你以某种方式做,它也不会对
song_name
产生影响 .在这种情况下,你完全不清楚你要做什么
序列和所有这些操作的重点是什么 .
如果您希望能够修改
song_name
字段,则必须从getName
返回对song_name
的引用这将修复您的错误,但这基本上会破坏
getName
函数提供的大部分保护和隔离 . 如果你立即通过一个返回getName
函数的nopn-const引用将它暴露给外部世界,那么使song_name
私有的重点是什么?更好的想法是写一个
setName
函数并用它来修改song_name
,而不是试图获得对song_name
的直接引用访问 .