-2

次のようなクラス定義があります。

template <class Impl>
FullO3CPU<Impl>::FullO3CPU(DerivO3CPUParams *params)
class DerivO3CPU : public FullO3CPU<O3CPUImpl>
{
   public:
     DerivO3CPU(DerivO3CPUParams *p)
       : FullO3CPU<O3CPUImpl>(p)
     { }
};

DerivO3CPU * 
DerivO3CPUParams::create()
{
  ...
  return new DerivO3CPU(this);
}

私が変更したのは、FullO3CPU に別の引数を追加することでした

template <class Impl>
FullO3CPU<Impl>::FullO3CPU(DerivO3CPUParams *params, My_param *mp)

class DerivO3CPU : public FullO3CPU<O3CPUImpl>
{
   public:
     DerivO3CPU(DerivO3CPUParams *p, My_param *mp)
       : FullO3CPU<O3CPUImpl>(p, mp)
     { }
};

DerivO3CPU *
DerivO3CPUParams::create() 
{
  ...
  return new DerivO3CPU(this);
}

しかし、私は何をすべきかわかりません

return new DerivO3CPU(this); 

このエラーが発生するため:

error: no matching function for call to 'DerivO3CPU::DerivO3CPU(DerivO3CPUParams* const)'
note: candidates are:
note: DerivO3CPU::DerivO3CPU(DerivO3CPUParams*, My_param*)
note:   candidate expects 2 arguments, 1 provided
4

3 に答える 3

2

に追加するcreateか、どこかに保存されているものを使用する必要があります。

DerivO3CPU *
DerivO3CPUParams::create(My_param *p) 
{
  ...
  return new DerivO3CPU(this, p);
}
于 2011-12-03T10:54:48.213 に答える
1

どの関数を呼び出そうとしていますか? DerivO3CPU のコンストラクターは引数を 1 つ取りません。1 つありましたが、それに 2 番目の引数を追加しました。では、どのように機能するのでしょうか?1 つの引数のコンストラクターを保持するか、呼び出しを停止する必要があります。

于 2011-12-03T10:55:46.303 に答える
0

DerivO3CPUのコンストラクターを呼び出そうとしていますが、使用可能なコンストラクターは

DerivO3CPU(DerivO3CPUParams *p, My_param *mp)

したがって、「new」呼び出しでMy_param *を指定するか、My_param *引数を受け取らないが、FullO3CPU呼び出しにデフォルトを提供する別のコンストラクターを作成する必要があります。

于 2011-12-03T11:01:26.627 に答える