以下有一个非常奇怪的错误:
在标头中,我有:
class WCameraPosition : public Widget3D
{
public:
WCameraPosition(double scale = 1.0);
WCameraPosition(const Matx33d &K, double scale = 1.0, const Color &color = Color::white());
WCameraPosition(const Vec2d &fov, double scale = 1.0, const Color &color = Color::white());
WCameraPosition(const Matx33d &K, InputArray image, double scale = 1.0, const Color &color = Color::white());
WCameraPosition(const Vec2d &fov, InputArray image, double scale = 1.0, const Color &color = Color::white());
};
class Widget3D : public Widget
{
public:
Widget3D() {}
//...
}
typedef Matx<double, 3, 3> Matx33d;
出于某些原因,将编译以下内容:
WCameraPosition camSymbol1(Matx33d(K));
WCameraPosition camSymbol2(1.0);
Widget w(camSymbol2);
但这不是:
WCameraPosition camSymbol1(Matx33d(K));
WCameraPosition camSymbol2(1.0);
Widget w(camSymbol1);
我得到错误:
error: no matching function for call to ‘Widget3D::Widget3D(
WCameraPosition (&)(Matx33d))’
note: Widget3D::Widget3D(const Widget3D&)
no known conversion for argument 1 from ‘WCameraPosition(Matx33d)
{aka WCameraPosition(Matx<double, 3, 3>)}’ to
‘const Widget3D&’
我对此完全迷住了。就像创建了新的模板化类型一样,但是WCameraPosition及其超类甚至不使用模板。
我需要将camSymbol1传递给采用Widget3D&的函数。我该如何解决?
最佳答案
这是the most vexing parse的情况。编译器认为这是一个函数声明:
WCameraPosition camSymbol1(Matx33d(K));
通过使用花括号初始化对象来修复此问题:
WCameraPosition camSymbol1{Matx33d(K)};
关于c++ - C++无法在构造函数中使用模板化参数转换类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42383774/