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 クラスの上から 2 番目の関数です。

ポインターなしで同じことを試みました (*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 に答える