我试图将一个对象从一个类构造函数传递给另一个,但是,它似乎并不想工作。以下是代码:
我有以下课程:
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;
};
我有多个类Hamming
,Hanning
,它们都继承自类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
,我也无法将Barlett
转换为Window
。
如果有人有任何建议,那将是非常好的:)
答案 0 :(得分: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
。