2014-09-27 121 views
1

我想在C++中创建一个三元树,它读取一个文件并根据它读取的单词创建树。每个节点都有一个字符,然后是文件中以该字符开始的所有单词列表,父指针,左指针,左指针和右指针。使用它的结构指针访问函数内的结构

在我的节目,我有结构:

struct node_t{ 
    node_t *parent; 
     node_t *left1; 
     node_t *left2; 
     node_t *right; 
     char letter; 
     vector<string> wordList; 
     int lineCount; 
    }; 

,我有原型插入一个字

int insertWord(ifstream &dataFile, node_t *parent, char myLetter); 

然后在主我调用一个函数insertWord

if (insertWord(dataFile, &root, ch) == 0{ 
    //if no errors occurred in function do something 
} 

然后,在insertWord中,如果单词属于父数组,则尝试向我的父节点的向量Array添加单词:

parent->wordList.push_back(word); 

当我尝试在main中打印出列表时,它没有将该单词添加到列表中。当我用insertWord打印出来的时候,它确实将这个词添加到了列表中。 我知道这是一个指针问题,但我只是看不到我做错了什么。我没有发布我的所有代码,因为它有这么多。

任何关于如何成功将我的单词添加到列表中的想法,以便它打印出主?

+0

您正确地访问它。您可能试图从错误的对象打印,或者父母不指向您认为它的对象。 – 2014-09-27 21:48:12

回答

0

显然,您不提供足够的信息。你在做什么是完全正确的,但细节呢?我想你定义rootnode_t,即:

node_t root; 

含义根是第一个节点。然后你通过&rootinsertWord收到它作为node_t *parent。然而,insertWord具有检测,并与空的根处理(它是如何BTW编码),并会做这样的事情:

parent = some newly allocated node 

,但这样做对root变量没有影响(这是由值实际上通过) 。

所以你需要声明:

node_t *root; 

,并继续通过&root。在insertWord中,您收到一个node_t **pparent(指向父代的指针),因此您可以修改父代(即根目录)。在insertWord中,将所有parent替换为*pparent,例如,

*pparent = some newly allocated node 

我猜想insertWord功能是递归的,你应该有这样的代码:

insertWord(...,parent->left1,...) 

成为

insertWord(...,&(*pparent->left1),...) 
+0

非常感谢您的帮助!对于缺乏信息抱歉。我没有正确传递价值,所以我将根改为* root,并且做了你所说的并且它工作得很好! – 2014-09-28 23:36:37

0

这听起来像你可能传递值的地方,你想通过引用或指针传递。我没有看到这个代码中的问题,但进入调试器,并确保结构的地址和指针值匹配从主要向下到插入文字