从另一个成员函数的实现中调用成员函数
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 int
的 vector
的 vector
。然而,这并没有编译,所以我去找成员函数指针并写道:
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++,而且更短。
所以我定义了一个 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 int
的 vector
的 vector
。然而,这并没有编译,所以我去找成员函数指针并写道:
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 typestd::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++,而且更短。