0

私は2つの構造体と関数を持っています

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

寄稿者による回答は、私を回答に導くのに役立ちましたが、彼らは問題からわずかに離れた回答を出しています。

セットアップの場合、関数は構造体nodeTを使用charT し、同等のもので呼び出されました

   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 に答える
0

関数宣言と関数呼び出しの引数の数が一致せず、関数に変数 arg がありません。コンパイルのハードルもクリアすべきではありません。

于 2012-08-14T11:45:14.357 に答える