c++ - 通过引用匿名实例传递时出现意外的编译错误

标签 c++

<分区>

假设我有一个结构:

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 他(编译器)传递对匿名实例的引用有问题,但为什么呢?匿名实例存在于调用函数的堆栈中。

最佳答案

那是因为你不能将一个临时变量绑定(bind)到一个非常量引用上。将您的引用标记为 const,它将起作用。

此外,您在定义中使用了标准的 C++ 关键字 (struct)

void myfunc(structazauras& struct) { }

将名称更改为其他名称。或者你的意思是

void myfunc(struct structazauras&) { }

但是额外的 struct 在 C++ 中是多余的。

关于c++ - 通过引用匿名实例传递时出现意外的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30168634/

相关文章:

c++ - opencv相机标定(Assertion failed故障)

c++ - 如何计算数组中出现的次数?

c++ - 如何在C++程序中终止系统进程?

c++ - Eigen 中填充稀疏矩阵的速度取决于节点数或边数?

c++ - 原子引用计数

c++ - C++ 17:在.cpp文件中定义静态constexpr成员函数

c++ - 如何在场景中找到一个项目

c++ - Internet Explorer 工具栏上组合框的 Windows 7 样式,怎么样?

c++ - std::basic_string 类型的 STL 容器

javascript - MQTT 作为集中式通信协议(protocol)