将临时对象传递给函数

时间:2013-07-11 16:13:39

标签: c++ object parameter-passing

我认为这被称为临时对象。这是我的情景:

我有一些功能:

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 ++。

非常感谢有关如何修复我的实现或对此行为的解释的任何建议!

2 个答案:

答案 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;作为参数。我希望这两个选项都能奏效。