-1

我试图将一个对象从一个类构造函数传递给另一个,但是,它似乎不想工作。下面是代码:

我有以下课程:

class STFT {

    public:

      template<typename Inverse>
      STFT(Inverse begin, Inverse end, size_t x, size_t y, WindowType type)
      {
          switch(type) 
          {
              case 0: 
              this->w = Window(0, 100, this->w); // "0" is the type of window, 100 is the size, this-w is a reference to the object. 
              break;

              case 1:

              break;
          }         
      }
    protected:
       Window w;
};

我有多个类HammingHanning它们都继承自该类Window..我想做的是让构造函数Window确定要初始化的对象..

Window(int theWindow, size_t size, Window& w)
{
   switch(theWindow)
   {
      case 0:
        w = new Barlett(100);
      break;
      //**
}

但我收到以下错误:

no known conversion for argument 1 from 'Barlett*' to 'const Window&'

我认为这是因为Window即使Barlett继承BarlettWindow.

如果有人有任何建议,那就太好了:)

4

1 回答 1

1

本质上,您是在尝试创建一个工厂,但您是在构造函数中进行的。那没有意义。把它放在别的地方:

class WindowFactory {
    public:
    static Window* create(int theWindow, size_t size)
    {
       Window *w;
       switch(theWindow)
       {
         case 0:
           w = new Barlett(100);
           break;
         //**
       }
       return w;
    }
};

//....
Window *w = WindowFactory::create(0, 10);

注意:出于示例的目的,我将其添加为静态方法,但为了灵活性和可测试性,您可能希望实例化一个具体的 WindowFactory 对象并调用create它。

于 2013-08-15T21:11:40.750 回答