假设我有一个结构:
struct structazauras
{
string bla;
}
还有一些函数(在我的例子中,这个函数实际上是某个类的构造函数,但我认为这不是问题):
void myfunc(structazauras& mystruct) { }
然后我称之为myfunc:
..
myfunc(structazauras());
..
我收到错误:
no matching function for call to myfunc(structazauras) candidates are myfunc(structazauras&)
如果我将代码更改为:
structazauras tmp;
myfunc(tmp);
它会正常工作。
我觉得他(编译器)在structazauras
传递对匿名实例的引用时遇到问题,但为什么呢?匿名实例存在于调用函数的堆栈中。
答案 0 :(得分:2)
这是因为您无法将临时绑定到非const引用。将您的参考标记为const
,它会起作用。
此外,您在定义
中使用标准C ++关键字(struct
)
void myfunc(structazauras& struct) { }
将名称更改为其他名称。或许你的意思是
void myfunc(struct structazauras&) { }
但是额外的struct
在C ++中是多余的。