使用它的结构指针访问函数内的结构
我想在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打印出来的时候,它确实将这个词添加到了列表中。 我知道这是一个指针问题,但我只是看不到我做错了什么。我没有发布我的所有代码,因为它有这么多。
任何关于如何成功将我的单词添加到列表中的想法,以便它打印出主?
显然,您不提供足够的信息。你在做什么是完全正确的,但细节呢?我想你定义root
为node_t
,即:
node_t root;
含义根是第一个节点。然后你通过&root
和insertWord
收到它作为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),...)
非常感谢您的帮助!对于缺乏信息抱歉。我没有正确传递价值,所以我将根改为* root,并且做了你所说的并且它工作得很好! – 2014-09-28 23:36:37
这听起来像你可能传递值的地方,你想通过引用或指针传递。我没有看到这个代码中的问题,但进入调试器,并确保结构的地址和指针值匹配从主要向下到插入文字
您正确地访问它。您可能试图从错误的对象打印,或者父母不指向您认为它的对象。 – 2014-09-27 21:48:12