1

我的基类中有一个成员函数,它通过引用获取参数:

// 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&’

我只是想通过引用传递参数,不知道它为什么要转换?

4

2 回答 2

2

像这样的临时对象Atom_Placed(Position_Atom)不能绑定到非常量引用,例如参数Atom_Place&。原因是它们是临时对象,现在随时都会死去。

您可以创建一个类型的局部变量Atom_Placed并将其传递给函数Push_Back_This_CPU

Atom_Placed tmp(Position_Atom);
Push_Back_This_CPU(tmp, Global_ID);
于 2013-01-24T18:59:02.657 回答
2

您不能将临时值绑定到非常量左值引用。但是,由于您的函数不需要修改其参数,因此最简单的解决方案是获取const引用:

void FuncA(Data const & data, int const & Global_ID) 
//              ^^^^^             ^^^^^

现在您可以将临时值传递给函数。

(注意:我假设Data_LocalLocal_To_Global_ID具有标准容器接口。如果它们的push_back函数也采用非常量引用,那么它们也需要修复。)

于 2013-01-24T19:23:54.017 回答