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

时间:2017-07-10 15:42:44

标签: c++ inheritance type-conversion operator-overloading overloading

我认为我的问题很简单明了:

我有基类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构造函数,但没有任何无聊的语法,我需要隐式

谢谢

1 个答案:

答案 0 :(得分:5)

您应该只提供转发声明

namespace mtrx {

    class Matrix; // <=== here

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

    class Matrix : public AbstractMatrix {

    };

}

使Matrix类可见AbstractMatrix

P.S。你应该重新考虑你的设计,因为有一个转换操作符将基类转换为派生类对我来说看起来很奇怪。