从另一个成员函数的实现调用成员函数

时间:2017-09-01 22:56:40

标签: c++ class vector member-functions

所以我定义了一个方形矩阵的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)

不兼容

我出错了什么?

1 个答案:

答案 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 ++,也更短。