我的基类中有一个成员函数,它通过引用接受参数:
// Base
template<class Data, class Variable_Type = double>
class Parallel_Data
{
...
void FuncA(Data& data, int& Global_ID)
{Data_Local.push_back(data); Local_To_Global_ID.push_back(Global_ID);};
}
// Derived
class Derived: public Parallel_Data<Atom_Placed>
问题是当我尝试在派生成员函数中调用该函数时
Push_Back_This_CPU(Atom_Placed(Position_Atom), Global_ID);
我收到以下错误
no known conversion for argument 1 from ‘Atom_Placed’ to ‘Atom_Placed&’
我只是试图通过引用传递参数,并且不知道它为什么要转换?
答案 0 :(得分:2)
像Atom_Placed(Position_Atom)
这样的临时工具不能绑定到非const引用,例如参数Atom_Place&
。原因是它们是临时物体,现在任何时候都会死亡。
您可以创建Atom_Placed
类型的局部变量,并将其传递给函数Push_Back_This_CPU
Atom_Placed tmp(Position_Atom);
Push_Back_This_CPU(tmp, Global_ID);
答案 1 :(得分:2)
您无法将临时值绑定到非const 左值引用。但是,由于您的函数不需要修改其参数,最简单的解决方案是采用const
引用:
void FuncA(Data const & data, int const & Global_ID)
// ^^^^^ ^^^^^
现在您可以将临时值传递给函数。
(注意:我假设Data_Local
和Local_To_Global_ID
有标准容器接口。如果他们的push_back
函数也采用非const引用,那么它们也需要修复。)