0

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

我有一些功能:

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

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

4

2 回答 2

1

的结果mylist.Begin()是临时的(除非 mylist.Begin()返回引用)。您不能使用临时来初始化非常量引用。将结果分配给一个变量,并将其传递给Remove,使引用为 const,或使用按值传递。

至于为什么VS2012编译它:VS2012不符合。

于 2013-07-11T16:18:47.317 回答
0

克里斯,如果你看到错误编译器给出(在你的第一条消息中)“没有匹配的函数来调用 Remove(ListIterator)”,这里编译器声明 ListIterator 作为参数传递给 Remove,而它需要 ListIterator&,所以要解决更改 func声明开始返回 ListIterator& ,或者按照 Kris 的建议,将 Remove func 声明更改为以 const ListIterator & 作为参数。我希望这两个选项都可以工作。

于 2013-07-11T17:16:09.077 回答