我认为我的问题很简单明了:
我有基类AbstractMatrix,它是Matrix的子类,我想进行简单的转换:
namespace mtrx {
/* mycode */
class AbstractMatrix {
public:
/* -//- */
operator Matrix ();
/* -//- */
}
class Matrix : public AbstractMatrix {
/* -//- */
}
}
AbstractMatrix.cpp:
AbstractMatrix::operator Matrix(){
return Matrix(data);
}
编译器给出消息:
Matrix.h:39:12: error: expected type-specifier before ‘Matrix’
operator Matrix ();
^
我做错了什么? 是否可以进行此类转换?我想是的,因为我只想要基于超类的make构造函数,但没有任何无聊的语法,我需要隐式
谢谢
答案 0 :(得分:5)
您应该只提供转发声明:
namespace mtrx {
class Matrix; // <=== here
class AbstractMatrix {
public:
operator Matrix ();
};
class Matrix : public AbstractMatrix {
};
}
使Matrix
类可见AbstractMatrix
。
P.S。你应该重新考虑你的设计,因为有一个转换操作符将基类转换为派生类对我来说看起来很奇怪。