我有两个类,一个是矩阵,然后是一个继承自矩阵类的对角矩阵。
显然,从对角线转换为矩阵很容易,但转换回来需要转换。
class Diagonal : public Matrix<T>
{
operator Matrix<T>() const;
};
存在于我的代码中,我认为应该转换。总的来说,我有:
Matrix<float> theMatrix(size,size);
Diagonal<float> theDiag(size,size);
theDiag = theMatrix;
除了转换,一切都运行良好,它告诉我:
no known conversion for argument 1 from ‘Matrix<float>’ to ‘const Diagonal<float>&’
有什么建议吗?谢谢。
最佳答案
你的代码
class Diagonal : public Matrix<T>
{
operator Matrix<T>() const;
};
定义从 Diagonal<T>
的转换至 Matrix<T>
,而您的作业需要从 Matrix<T>
进行转换至 Diagonal<T>
.
你是想改写这个吗?
class Matrix<T>
{
operator Diagonal<T>() const;
};
现在即使这行得通*(我对此表示怀疑,因为它会导致循环依赖),我不确定从语义的角度来看它是否有意义。 并非每个矩阵都是对角矩阵,因此从矩阵转换为对角矩阵不能保留所有数据。从设计的角度来看,在这种情况下使用隐式转换不是一个好主意。
*另一种方法是定义 operator=(const Matrix<T>&)
对于 Diagonal<T>
.
关于C++ 类转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23283748/