Я довольно новичок в 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)), но это не помогло.
В C ++ перегрузки в дочернем классе скрывают методы в родительском классе, поэтому только функция в Matrix может вызываться с помощью Matrix.
Вы можете использовать использование для предоставления дополнительных методов, что-то вроде этого.
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);
}
...
}
я догадываюсь (dims+index)
продвигается к чему-то еще. Возможно, попробуйте явным образом привести результат или назначить выражение соответствующей временной переменной.