Метод не перегружается

Я довольно новичок в 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)), но это не помогло.

1

Решение

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

Другие решения

я догадываюсь (dims+index) продвигается к чему-то еще. Возможно, попробуйте явным образом привести результат или назначить выражение соответствующей временной переменной.

1

По вопросам рекламы [email protected]