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_LocalおりLocal_To_Global_ID、標準のコンテナーインターフェイスを持っています。それらのpush_back関数も非定数参照を受け取る場合は、それらも修正する必要があります。)

于 2013-01-24T19:23:54.017 に答える