C++ 如何正确重载从基类到继承的转换

C++ 如何正确重载从基类到继承的转换,c++,inheritance,type-conversion,operator-overloading,overloading,C++,Inheritance,Type Conversion,Operator Overloading,Overloading,我想我的问题简单明了: 我有基类AbstractMatrix和它的子类Matrix,我想进行简单的转换: namespace mtrx { /* mycode */ class AbstractMatrix { public: /* -//- */ operator Matrix (); /* -//- */ } class Matrix : public AbstractMatrix { /* -/

我想我的问题简单明了:

我有基类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 ();
            ^
我做错了什么? 有可能进行这样的转换吗?我想是的,因为我只想使构造函数基于超类,但没有任何无聊的语法,我需要它隐式


谢谢

您只需提供一份转发声明:

使抽象矩阵类的矩阵可见


另外,您可能应该重新考虑您的设计,因为使用转换运算符将基类转换为派生类对我来说很奇怪。

您只需提供一个转发声明:

使抽象矩阵类的矩阵可见


另外,您可能应该重新考虑您的设计,因为使用转换运算符将基类转换为派生类对我来说很奇怪。

我更好奇的是,为什么需要这样做?操作员应该解决什么问题?你不能有一个返回抽象矩阵指针的虚拟getter函数吗?或者使用来了解子类?至于您的问题,您知道在使用符号之前必须声明符号,有时甚至必须定义符号?例如,对于fooMatrix A;如果我像这样做,其中B是抽象矩阵,B将被转换为矩阵类。谢谢你的建议,我最近开始学习C++,我会阅读虚拟函数和CRTP,也许它会帮助我。我更好奇为什么你需要这么做?操作员应该解决什么问题?你不能有一个返回抽象矩阵指针的虚拟getter函数吗?或者使用来了解子类?至于您的问题,您知道在使用符号之前必须声明符号,有时甚至必须定义符号?例如,对于fooMatrix A;如果我像这样做,其中B是抽象矩阵,B将被转换为矩阵类。谢谢你的建议,我最近开始学习C++,我会阅读虚拟函数和CRTP,也许它会帮助我。哦,我试着在命名空间上面做。关于设计是的,我认为你的评论是恰当的,但更多的是出于好奇为什么它不起作用,我试着在名称空间上面做。关于设计是的,我认为你的评论是恰当的,但更多的是出于好奇为什么它不起作用
namespace mtrx {

    class Matrix; // <=== here

    class AbstractMatrix {
        public:
        operator Matrix ();
    };

    class Matrix : public AbstractMatrix {

    };

}