указатель "this" (C ++) - PullRequest
       3

указатель "this" (C ++)

0 голосов
/ 03 декабря 2011

Существует определение класса, подобное этому:

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

Ответы [ 3 ]

2 голосов
/ 03 декабря 2011

Ну, вам тоже нужно добавить его в create или использовать где-нибудь еще.

DerivO3CPU *
DerivO3CPUParams::create(My_param *p) 
{
  ...
  return new DerivO3CPU(this, p);
}
1 голос
/ 03 декабря 2011

Какую функцию вы пытаетесь вызвать?Ни один конструктор DerivO3CPU не принимает один аргумент.Был один, но вы добавили второй аргумент к нему.Так как это может сработать?Вы должны либо оставить конструктор с одним аргументом, либо прекратить его вызывать.

0 голосов
/ 03 декабря 2011

Вы пытаетесь вызвать конструктор DerivO3CPU, и единственный доступный конструктор -

DerivO3CPU(DerivO3CPUParams *p, My_param *mp)

Итак, вам нужно либо предоставить My_param * в вашем "новом" вызове, либо создать другой конструктор, который не принимает аргумент My_param *, но предоставляет некоторые значения по умолчанию для вызова FullO3CPU.

...