0

私のコンパイラは次のように不平を言います:

Matrix.cpp:58: error: no matching function for call to ‘List::miterator::miterator(List::miterator)’
List.h:99: note: candidates are: List::miterator::miterator(List::miterator&)
List.h:98: note:                 List::miterator::miterator(List::Node*, Dim)
List.h:97: note:                 List::miterator::miterator(Dim)

リストから継承するクラス List とクラス Matrix があります。クラス miterator はクラス List 内に配置されます。58行目は次のように述べています。

miterator i( nula(ROW) );

そして中に置かれます:

Matrix Matrix::operator*( const Matrix& right ) const

行列はスパースで、List は 2 次元リングです。メソッド nula は、指定された次元の最初のマージナル センチネルのイテレータを返します。ディメンションは、次のようにグローバルに定義されます。

typedef enum { ROW, COL } Dim;
Dim operator!(Dim dim) { return dim == COL ? ROW : COL; }

リストのノードは List 内で定義され、次のフィールドが含まれます。

private:
    unsigned index[2];
    T num;
public:
    Node *next[2];

助けていただければ幸いです。何が問題なのかわかりません。私は初心者の C++ プログラマであることを覚えておいてください。前もって感謝します。

編集:これも役立つかもしれません。miterator定義の内部から:

    miterator( Dim dir ) { direction_flag = dir; }
    miterator( Node *n, Dim dir ) { node = n; memory = n; direction_flag = dir; }
    miterator( miterator &i ) { node = i.node; memory = i.memory; direction_flag = i.direction_flag; }
    ~miterator() {}
    inline bool operator==( const miterator& i) const { return node == i.node; }
    inline bool operator!=( const miterator& i) const { return node != i.node; }
    inline miterator& operator=( const miterator i ) { node = i.node; memory = i.memory; return *this; }
4

1 に答える 1

1
List::miterator::miterator(List::miterator&)

する必要があります

List::miterator::miterator(List::miterator const&)

一時的な(あなたの場合)は非参照nula(ROW)にバインドできません。constコンストラクターを変更する (推奨) か、一時的なものを使用しないでください。

nula n(ROW);
miterator i(n);
于 2012-11-29T01:06:54.033 に答える