我认为这被称为临时对象。这是我的情景:
我有一些功能:
void List<T>::Remove(ListIterator &)
ListIterator List<T>::Begin() //returns an iterator pointing to the first node in the list.
在G ++中,当我尝试做这样的事情时:
mylist.Remove(mylist.Begin())
我收到以下错误:
没有用于调用Remove(ListIterator)的匹配函数。
我没有一个按值获取ListIterator的函数,也不需要一个函数。但是我不确定我想要做的事情是否有意义。该代码适用于Windows VS2012,但不适用于g ++。
非常感谢有关如何修复我的实现或对此行为的解释的任何建议!
答案 0 :(得分:1)
mylist.Begin()
的结果是暂时的(除非
mylist.Begin()
返回引用)。你不能使用
临时初始化非const引用。分配
将结果传递给变量,并将其传递给Remove
,制作
引用const,或使用pass by value。
至于为什么VS2012编译它:VS2012不符合。
答案 1 :(得分:0)
Kris,如果你看到错误编译器(在你的第一条消息中)“没有匹配函数来调用Remove(ListIterator)”,那么编译器声明ListIterator被传递给Remove as参数,而它需要ListIterator&amp;,所以要解决更改func声明开始返回ListIterator&amp;或者正如Kris建议的那样,更改Remove func声明以获取const ListIterator&amp;作为参数。我希望这两个选项都能奏效。