在递归循环中有条件地修改引用的内存

时间:2012-08-13 23:08:44

标签: c++ visual-studio-2008 recursion pass-by-reference

我有两个结构和一个函数

struct nodeT {
bool last;
string attribute1;
string attribute2;
string attribute3;
vector<charT> leafs;
};

struct charT {
char character;
nodeT *next;
};

void addNode(nodeT *n, string stringy, string &attribute1, string &attribute2, string &attribute3)
{
   if (stringy=="") {
      w->last=true;
      return;
   } else {
      if (n->last==true) {
          attribute1=n->attribute1; //these attribute fields were given values earlier
          attribute2=n->attribute2;
          attribute3=n->attribute3;
      }
      addNode(n, stringy.substr(1), attribute);
   }
}

使用

调用addNode
string test="";
addNode(root, "wordy", test, test, test);

问题是属性引用string &attribute未更改为5,它会继续使用""值进行下一次调用。

我尝试将其作为指针引用*attribute->n->attribute 并附上参考&attribute = n->attribute 这些都是在黑暗中拍摄的,并没有奏效。

编辑:应该使用单独的内存引用调用addNode

string test1="";
string test2="";
string test3="";
addNode(root, "wordy", test1, test2, test3);

3 个答案:

答案 0 :(得分:0)

您是否尝试在构造函数中初始化attribute

struct nodeT {
   bool last;
   string attribute;
   vector<charT> leafs;
   nodeT() : attribute("5") {}
 };

您的代码看起来有点但不完全,与Java不同......: - )

答案 1 :(得分:0)

函数声明和函数调用的参数不匹配,函数dosnt具有变量arg。它也不应该清除编译障碍。

答案 2 :(得分:0)

贡献者的回答帮助我找到了答案,但是他们已经从问题中略微回答了答案。

对于设置,函数使用结构nodeTcharT 并被称为相当于

   root is defined globally in the class
   string wordy = "hello";
   string test="";
   addNode(root, "wordy", test, test, test);
应该使用单独的内存引用调用

addNode

string test1="";
string test2="";
string test3="";
addNode(root, "wordy", test1, test2, test3);

因此,当稍后使用唯一值更改属性1,2和3时,每个属性都有相应的唯一内存。