2014-09-27 76 views
1

我想在C++中創建一個三元樹,它讀取一個文件並根據它讀取的單詞創建樹。每個節點都有一個字符,然後是文件中以該字符開始的所有單詞列表,父指針,左指針,左指針和右指針。使用它的結構指針訪問函數內的結構

在我的節目,我有結構:

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

然後在主我調用一個函數insertWord

if (insertWord(dataFile, &root, ch) == 0{ 
    //if no errors occurred in function do something 
} 

然後,在insertWord中,如果單詞屬於父數組,則嘗試向我的父節點的向量Array添加單詞:

parent->wordList.push_back(word); 

當我嘗試在main中打印出列表時,它沒有將該單詞添加到列表中。當我用insertWord打印出來的時候,它確實將這個詞添加到了列表中。 我知道這是一個指針問題,但我只是看不到我做錯了什麼。我沒有發佈我的所有代碼,因爲它有這麼多。

任何關於如何成功將我的單詞添加到列表中的想法,以便它打印出主?

+0

您正確地訪問它。您可能試圖從錯誤的對象打印,或者父母不指向您認爲它的對象。 – 2014-09-27 21:48:12

回答

0

顯然,您不提供足夠的信息。你在做什麼是完全正確的,但細節呢?我想你定義rootnode_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),...) 
+0

非常感謝您的幫助!對於缺乏信息抱歉。我沒有正確傳遞價值,所以我將根改爲* root,並且做了你所說的並且它工作得很好! – 2014-09-28 23:36:37

0

這聽起來像你可能傳遞值的地方,你想通過引用或指針傳遞。我沒有看到這個代碼中的問題,但進入調試器,並確保結構的地址和指針值匹配從主要向下到插入文字