gpt4 book ai didi

c++ - 使用它的结构指针访问函数内的结构

转载 作者:太空宇宙 更新时间:2023-11-04 13:45:45 24 4
gpt4 key购买 nike

我正在尝试用 C++ 创建一个三叉树,它读取一个文件并根据读取的单词创建树。每个节点都有一个字符,然后是文件中以该字符开头的所有单词的列表、一个父指针、一个左指针、一个左指针和一个右指针。

在我的程序中我有结构:

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

而且我有插入单词的原型(prototype)

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

然后在 Main 中我调用了一个函数 insertWord

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

然后在 insertWord 中,如果单词属于父数组,我会尝试将单词添加到父节点的 vector 数组中:

parent->wordList.push_back(word);

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

关于如何成功地将我的单词添加到列表以便它在 main 中打印出来有什么想法吗?

最佳答案

很明显,您没有向我们提供足够的信息。您所做的总体上是正确的,但是细节呢?我认为您将 root 定义为 node_t,即:

node_t root;

表示根是第一个节点。然后你传递 &root 并且 insertWord 接收它作为 node_t *parent。但是,insertWord 必须检测并处理空根(顺便说一句,它是如何编码的),并且会执行如下操作:

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),...)

关于c++ - 使用它的结构指针访问函数内的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26079456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com