![](/img/trans.png)
[英]Accessing elements within a pointer of a struct inside another pointer to a struct
[英]Accessing a struct within a function using it's struct pointer
我试图在C ++中创建一个三叉树,它会读取一个文件,并根据读取的单词创建该树。 每个节点都有一个字符,然后是该文件中以该字符开头的所有单词的列表,一个父指针,一个left1指针,一个left2指针和一个右指针。
在我的程序中,我有一个结构:
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);
然后在Main中我调用一个函数insertWord
if (insertWord(dataFile, &root, ch) == 0{
//if no errors occurred in function do something
}
然后在insertWord中,如果单词属于父数组,则尝试将单词添加到父节点的向量Array中:
parent->wordList.push_back(word);
当我尝试将列表打印回main时,它没有将单词添加到列表中。 当我在insertWord中打印出来时,确实将单词添加到列表中。 我知道这是一个指针问题,但是我看不到我在做什么错。 我没有发布我的所有代码,因为有太多代码了。
关于如何成功将我的单词添加到列表中以便在主列表中打印出来的任何想法?
听起来您可能在某个地方按值传递了,而您想按引用或指针传递。 我在这段代码中没有看到问题,但进入调试器,并确保结构的地址和指针值从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),...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.