1

我对 C++ 相当陌生,而且这种方法不会在 Vector 类中重载。

class Vector {
...
     void findTriDiagonalDeterminant(mpf_t *det, unsigned long long *d, double offset) {
          ...
     }

     void findTriDiagonalDeterminant(mpf_t *det, unsigned long long *d) {
          findTriDiagonalDeterminant(det, d, 0);
     }
}

class Matrix : public Vector {
private:
    unsigned long long* dims;
public:
    void findTriDiagonalDeterminant(mpf_t* det, int index) {
        Vector::findTriDiagonalDeterminant(det, dims+index);
    }
    ...
}

g++ 说

error: no matching function for call to ‘Matrix::findTriDiagonalDeterminant(__mpf_struct (*&)[1], long long unsigned int*)’

但是有一个匹配函数:Vector 类中的第二个。

我在没有指针的情况下尝试了相同的操作(通过将 *d 替换为 d 并将 dims+index 替换为 *(dims+index)),但它没有帮助。

4

2 回答 2

4

在子类中的 C++ 重载中,隐藏了父类中的方法,因此只能使用 Matrix 调用 Matrix 中的函数。

您可以使用 using 来公开额外的方法,就像这样。

class Matrix : public Vector {
private:
   unsigned long long* dims;
public:
   using Vector::findTriDiagonalDeterminat;
   void findTriDiagonalDeterminant(mpf_t* det, int index) {
     Vector::findTriDiagonalDeterminant(det, dims+index);
   }
...
}
于 2012-12-20T16:50:12.097 回答
1

我猜(dims+index)是被提升到别的地方。也许尝试显式转换结果或将表达式分配给适当的临时变量。

于 2012-12-20T16:40:49.303 回答