2016-05-10 4 views
0

単語/キーが既に存在する場合、単にAVLツリーをチェックする次のコードがあります。それは、そのノードへのポインタを返すない場合、そうでない場合はnullを返す:C++関数から返されたオブジェクトのデータメンバにアクセスするには?

void fileInput::testFunction() { 
    node newWord; 
    newWord.key = "test"; 
    newWord.wordCount = 1; 
    tree.AVL_Insert(newWord); 
    if ((verifyWord("test").wordCount) != NULL) { 
     //insert increment wordCount code here; 
    } 
} 

これは、ノード構造体である:

struct node { 
    string key; 
    int wordCount; 
}; 

これは、これはAVL_Retreiveある

node fileInput::verifyWord(string a) { 
    node b; 
    tree.AVL_Retrieve(a, b); 
    return b; 
} 

verifyWord関数であります機能:

template <class TYPE, class KTYPE> 
bool AvlTree<TYPE, KTYPE> 
    :: AVL_Retrieve (KTYPE key, TYPE& dataOut) 
{ 
    NODE<TYPE> *node; 

    if (!tree) 
     return false; 

    node = _retrieve (key, tree); 
    if (node) 
     { 
     dataOut = node->data; 
     return true; 
     } // if found 
    else 
     return false; 
} // AVL_Retrieve 

私の質問は、どのように私は、testFunction()のif文の中で返されたオブジェクトのwordCountを増やすことができるでしょうか

+2

あなたの質問は何ですか? –

+0

"wordCountをインクリメントしたいのであれば、ツリーに単語が存在するかどうかチェックしたい。そうでなければツリーに挿入する" - 良い計画のように聞こえる。それを試してみて、それがどのように機能するかお知らせください。 –

+0

@ JohnZwinckどのように私は、オブジェクトポインタのwordCountを増やすことができますか? – nanjero05

答えて

1

AVL_Retrieve()がノードへのポインタを返すように関数のすべてのコードを変更する必要がありますif見つかった場合はNULL、見つからない場合はNULLを返します。その後、verifyWord()は非常に同じポインタを返します。次に、そのポインタを使用してノードを変更することができます。このようなもの:

if (node* nn = verifyWord("test")) { 
    nn->wordCount++; 
} 

node* fileInput::verifyWord(string a) { 
    return tree.AVL_Retrieve(a); 
} 

template <class TYPE, class KTYPE> 
TYPE* AvlTree<TYPE, KTYPE> 
    :: AVL_Retrieve (KTYPE key) 
{ 
    if (!tree) 
     return NULL; 

    if (NODE<TYPE> *node = _retrieve (key, tree)) 
     return node->data; 
    else 
     return NULL; 
} 
+0

ありがとう、これは働いた – nanjero05

関連する問題