1

クラスがあります。

このクラスのメンバーへのポインターを返す関数を作成する必要があります。

私のクラスは次のようになります。

class clsNode
{
private:
    wstring m_grapheme;
    vector <clsNode*> m_Daughters;
public:
    clsNode *getNextNode(const udtCharVec &u);
};

私は次のことを試しました:

clsNode *clsNode::getNextNode(udtCharVec &u)
{

    if (u.Grapheme == m_grapheme)
    {
        return *m_Daughters[0];
    }
    else
    {
        return *m_Daughters[1];
    }
}

コンパイラから、「エラー c2511: clsNode:getNextNode(udtCharVec &): オーバーロードされたメンバー関数が clsNode に見つかりません」と表示されます。

どこで間違いを犯したか教えてもらえますか?ありがとうございました!

4

3 に答える 3

4

私はあなたが意味したと思います:

return m_Daughters[0];
//    ^

m_Daughters[0]は型であり、戻り値の型と一致しない型にclsNode*なる*m_Daughters[0]ためです。clsNode

また、関数の署名は定義と実装が異なります。

clsNode *getNextNode(const udtCharVec &u)
//                   ^^^^^
clsNode *clsNode::getNextNode(udtCharVec &u)
于 2013-05-26T13:49:16.607 に答える
2

ここでいくつかの間違いがあります。まず宣言があります

clsNode *getNextNode(const udtCharVec &u);

これは、関数が const への参照によって引数を取ることを意味しますが、関数を定義するときはこれを持っています

clsNode *clsNode::getNextNode(udtCharVec &u)

署名が異なります (2 番目の署名に const がないことに注意してください)。

2 番目の問題は、return ステートメントにあります。

return *m_Daughters[0];

戻り値の型は参照であり、ポインターではありません (* は、ベクトルから取得したポインターを逆参照します)。これを修正するには、次のようにします。

return m_Daughters[0];
于 2013-05-26T13:51:59.810 に答える
1

クラス宣言のメソッド シグネチャは次のとおりです。 clsNode *getNextNode(const udtCharVec &u);

ただし、以下の実装は次のとおりです。 clsNode *clsNode::getNextNode(udtCharVec &u)

宣言の「const」に注意してください。コンパイラは、一番下に実装した宣言が見つからないことを示しています

于 2013-05-26T13:50:27.797 に答える