所以我定义了一个方形矩阵的sqmatrix
类用于娱乐和学习,我已成功定义了一个函数submat
,它输出以某种方式构造的对象的子矩阵: / p>
sqmatrix sqmatrix::submat (unsigned int row, unsigned int col)
{ /* code */ return smat; }
现在我想定义另一个函数,该函数接受由submat
构造的子矩阵,并输出所有元素乘以42
的矩阵。为此,我写了
sqmatrix sqmatrix::cofact (unsigned int srow, unsigned int scol)
{
sqmatrix cfac = 42 * m_mat.submat(srow, scol);
return cfac;
}
我以前重载*
以处理我的对象,并且m_mat
已在类的标题中声明为vector
的{{1}}个vector
秒。但是,这没有编译,所以我去了成员函数指针并写道:
long long int
然而,这也没有编译。以下是头文件中的相关行:
sqmatrix sqmatrix::cofact (unsigned int srow, unsigned int scol)
{
sqmatrix (sqmatrix::*point)(unsigned int, unsigned int);
point = &sqmatrix::submat;
sqmatrix cfac = 42 * (m_mat.*point)(srow, scol);
return cfac;
}
编译说:
错误:指向成员类型
不兼容private: // ... std::vector< std::vector<long long int> > m_mat; public: // ... sqmatrix submat(unsigned int row, unsigned int col); sqmatrix cofact(unsigned int srow, unsigned int scol);
的指针与对象类型sqmatrix (sqmatrix::)(unsigned int,unsigned int)
我出错了什么?
答案 0 :(得分:2)
嗯。我认为你想要:
sqmatrix sqmatrix::cofact (unsigned int srow, unsigned int scol)
{
sqmatrix cfac = 42 * submat(srow, scol);
return cfac;
}
不知道你实际上想要做什么样的矩阵运算,但是如果你试图采用this
的子矩阵然后将它乘以常数42,那么你就是需要致电submat(srow, scol)
。
你编写它的方式,你试图调用向量的成员函数,而不是包含向量的类的成员函数。
C ++还允许您拨打this->submat(srow, scol)
,这可能会让您更清楚自己实际在做什么,但大多数时候您会看到人们调用成员函数时没有引用this
,作为完全有效的C ++,也更短。