两个类有转换方法

时间:2017-10-11 18:38:14

标签: c++ oop inheritance

我在C ++中有两个矩阵类,它们继承自相同的基类MatrixType。它们使用不同的方法来存储稀疏矩阵,并且是类模板,因为它们的条目可能是不同的类型。

每个矩阵类型都应该有一个允许转换为其他类型的方法。问题是,如果我在toCRS类中声明MatrixCOO,则参数的MatricCRS类型仍未定义。我该如何解决这个问题?

class MatrixType { /*...*/ };

template<typename Scalar>
class MatrixCOO {
    // Private stuff...
public:
    // Public stuff...
    void toCRS(MatrixCRS & target) { // Issue is here: MatrixCRS is undefined
        // Fill target with elements from *this
    }
}


template<typename Scalar>
class MatrixCRS {
    // Private stuff...
public:
    // Public stuff...
    void toCOO(MatrixCOO & target) {
        // Fill target with elements from *this
    }
}

PS:据我了解,即使我在MatrixCRS之前宣布课程MatrixCOO,我仍然会在声明MatrixCRS::toCOO (MatrixCOO &)时遇到同样的问题。

1 个答案:

答案 0 :(得分:2)

转发声明一,声明两者,定义需要两个类定义的函数:

class MatrixType { /*...*/ };

template<typename Scalar> class MatrixCRS; // Forward declaration

template<typename Scalar>
class MatrixCOO {
    // Private stuff...
public:
    // Public stuff...
    void toCRS(MatrixCRS<Scalar>& target); // Just declare the method
};

template<typename Scalar>
class MatrixCRS {
    // Private stuff...
public:
    // Public stuff...
    void toCOO(MatrixCOO<Scalar>& target) {
        // ...
    }
};

// Implementation, we have both class definitions
template<typename Scalar>
void MatrixCOO<Scalar>::toCRS(MatrixCRS<Scalar> & target)
{
    // ...
}