我是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)),但它没有帮助。
答案 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)
正在升级为其他东西。也许尝试显式地转换结果或将表达式分配给适当的临时变量。