-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 的构造函数没有一个参数。有一个,但你添加了第二个参数。那么它怎么可能起作用呢?您必须要么保留一个参数构造函数,要么停止调用它。

于 2011-12-03T10:55:46.303 回答
0

您正在尝试调用 DerivO3CPU 的构造函数,唯一可用的构造函数是

DerivO3CPU(DerivO3CPUParams *p, My_param *mp)

因此,您应该做的是在“新”调用中提供 My_param*,或者创建另一个不采用 My_param* 参数但为 FullO3CPU 调用提供一些默认值的构造函数。

于 2011-12-03T11:01:26.627 回答