我有两个类,一个是Matrix,然后是一个继承自Matrix类的对角矩阵。
显然,从Diagonal转换为Matrix很容易,但转换回来需要转换。
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>&’
有什么建议吗?感谢。
答案 0 :(得分:0)
您的代码
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>
。