"this"指针 (C++)

"this" pointer (C++)

本文关键字:C++ 指针 this      更新时间:2023-10-16

有这样的类定义:

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);
}

我所改变的是为fulllo3cpu添加另一个参数

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

那么,您也需要将其添加到create,或者使用存储在某处的一个。

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

试图调用什么函数?DerivO3CPU的构造函数不接受一个参数。有一个,但是你给它加了第二个参数。那么它怎么可能起作用呢?您必须保留只有一个参数的构造函数,或者停止调用它。

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

DerivO3CPU(DerivO3CPUParams *p, My_param *mp)

所以你应该做的是要么提供My_param*在你的"新"调用,或创建另一个构造函数,不接受My_param*参数,但提供一些默认的fulllo3cpu调用。