2016-05-10 1 views
0

J'ai le code suivant qui vérifie simplement un arbre AVL si un mot/clé existe déjà dedans. Si elle le fait renvoie un pointeur sur ce nœud sinon il retourne null:C++ Comment accéder au membre de données d'un objet renvoyé d'une fonction?

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; 
    } 
} 

C'est le struct noeud:

struct node { 
    string key; 
    int wordCount; 
}; 

C'est fonction verifyWord

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

C'est le AVL_Retreive Fonction:

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 

Ma question est de savoir comment je serais en mesure d'incrémenter wordCount de l'objet retourné dans l'instruction if dans testFunction()

+2

Alors, quelle est votre question? –

+0

"Je voudrais vérifier si un mot existe déjà dans l'arbre si c'est le cas je voudrais incrémenter son wordCount sinon je l'insère dans l'arbre" - sonne comme un bon plan. Essayez-le au mieux, puis dites-nous comment cela fonctionne. –

+0

@JohnZwinck Comment puis-je incrémenter wordCount dans le pointeur d'objet renvoyé par la fonction verifyWord? – nanjero05

Répondre

1

Vous devez changer le code dans chacune de vos fonctions afin que AVL_Retrieve() renvoie un pointeur vers le nœud si il est trouvé ou NULL s'il n'est pas trouvé. Puis verifyWord() retournera le même pointeur. Vous pouvez ensuite utiliser ce pointeur pour modifier le noeud. Quelque chose comme ceci:

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

merci, cela a fonctionné – nanjero05