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

Calling member function from another member function's implementation

所以我定义了一个 class sqmatrix 方阵用于娱乐和学习,我已经成功定义了一个函数 submat 输出 object 以某种方式构建:

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;
}

我之前超载了 * 以使用我的 object,并且 m_mat 已在 class 的 header 中声明作为包含 long long intvectorvector。然而,这并没有编译,所以我去找成员函数指针并写道:

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;
}

但是,这也不编译。以下是 header 文件中的相关行:

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);

编译器说:

Error: pointer to member type sqmatrix (sqmatrix::)(unsigned int,unsigned int) incompatible with object type std::vector< std::vector<long long int> >

我哪里错了?

嗯。我想你想要:

sqmatrix sqmatrix::cofact (unsigned int srow, unsigned int scol)
{
   sqmatrix cfac = 42 * submat(srow, scol);
   return cfac;
}

不知道你实际上想做什么样的矩阵运算,但如果你想取 this 的子矩阵然后乘以常数 42,那么你只需要呼叫 submat(srow, scol)

按照您的编写方式,您试图调用向量的成员函数,而不是调用包含向量的 class 的成员函数。

C++ 也允许你调用 this->submat(srow, scol) 这可能会让你更清楚你实际在做什么,但大多数时候你会看到人们调用成员函数而不引用 this,作为其完全有效的 C++,而且更短。