方法不会超载

时间:2012-12-20 16:33:24

标签: c++ overloading

我是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)),但它没有帮助。

2 个答案:

答案 0 :(得分:4)

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

您可以使用use来公开额外的方法,如下所示。

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

答案 1 :(得分:1)

我猜(dims+index)正在升级为其他东西。也许尝试显式地转换结果或将表达式分配给适当的临时变量。