0

我有两个结构和一个函数

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);
4

3 回答 3

0

您是否尝试过attribute在构造函数中进行初始化?

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

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

于 2012-08-13T23:24:52.033 回答
0

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

于 2012-08-14T11:45:14.357 回答
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 更改为唯一值时,每个属性都有一个对应的唯一内存。

于 2012-08-15T16:47:12.440 回答