【问题标题】:Accessing a struct within a function using it's struct pointer使用结构指针访问函数内的结构
【发布时间】:2014-09-27 21:36:01
【问题描述】:

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

在我的程序中,我有结构:

   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 中打印出来的任何想法?

【问题讨论】:

  • 您正在正确访问它。您可能试图从错误的对象打印,或者父对象没有指向您认为的对象。

标签: c++ pointers struct tree


【解决方案1】:

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

node_t root;

意思是根是第一个节点。然后你通过&amp;rootinsertWord 接收它作为node_t *parent。但是,insertWord 必须检测并处理空根(顺便说一句,它是如何编码的)并且会执行以下操作:

parent = some newly allocated node

但是这样做对root 变量没有影响(实际上是按值传递的)。

所以你需要声明:

node_t *root;

并继续传递&amp;root。在insertWord 中,您会收到node_t **pparent(指向父级的指针),因此您可以修改父级(即根)。在insertWord 中,将所有parent 替换为*pparent,例如

*pparent = some newly allocated node

我想insertWord 函数是递归的,你应该有这样的代码:

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

变成了

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

【讨论】:

  • 非常感谢您的帮助!抱歉信息不足。我没有正确传递值,所以我将我的 root 更改为 *root 并按照您所说的做了,效果很好!
【解决方案2】:

听起来您可能在某处通过值传递,而您希望通过引用或指针传递。我在这段代码中没有看到问题,但进入调试器并确保结构的地址和指针值从 main 向下匹配到 insertWord

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2015-12-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多