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

时间:2014-09-27 21:36:01

标签: c++ pointers struct tree

我正在尝试用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中,如果单词属于父数组,我会尝试将单词添加到父节点的向量数组中:

parent->wordList.push_back(word);

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

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

2 个答案:

答案 0 :(得分:0)

听起来你可能会在某个地方传递值,并且你希望通过引用或指针传递。我没有在这段代码中看到问题但是进入调试器并确保struct的地址和指针值匹配从main到insertWord

答案 1 :(得分:0)

显然,你没有向我们提供足够的信息。你在做什么总体上是正确的,但细节呢?我认为您将root定义为node_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),...)