C ++如何访问从函数返回的对象的数据成员?

时间:2016-05-10 01:49:59

标签: c++ avl-tree

我有以下代码,如果其中已存在字/密钥,则只检查AVL树。如果是,则返回指向该节点的指针,否则返回null:

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:

struct node {
    string key;
    int wordCount;
};

这是verifyWord函数

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

这是AVL_Retreive函数:

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

1 个答案:

答案 0 :(得分:1)

您需要更改每个函数中的代码,以便AVL_Retrieve()返回指向节点的指针(如果找到),如果找不到则返回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;
}