2013-09-21 62 views
1

我想要訪問在我的結構類中創建的節點的輸出。 現在我的代碼正在將名稱保存到每個節點中。從ostream從另一個類的結構中訪問數據

節點1:鮑勃,喬,吉爾

節點2:傑夫,安迪,凱文·路易斯·

節點3:希瑟,安迪,糖果

不過,我想弄清楚如何從ostream的操作

struct node { 
    node(string value="") {data=value; next=NULL; } 

    string data; 

    node *next; 
}; 


class list { 

public: 
    list(int N=0, int value=0); 
    ~list(); 

    friend ostream & operator << (ostream &, const list &); 

private: 
    int N; 
    node *head; 

}; 


ostream& operator << (ostream & out, const list & list_def) 
{ 
//out << list_def.data; 

} 

int main(){ 
list names[3]; 

cout << names[0]; 

} 

的名稱被保存在節點它們輸出數據保存每個名稱。正如你所看到的,我試着做list_def.data,但它不會輸出它們。我覺得它會像list_def.node-> data這樣的東西,但是這也不起作用。

+0

您可能想枚舉該列表,因爲您正在經歷構建它和所有的麻煩。 – WhozCraig

回答

1

可能有其他的問題,但這樣的:如果你的list類的構造函數是否正確定義

ostream& operator << (ostream & out, const list & list_def) 
{ 
node *ptr = head; 
while(ptr){ 
    out<<ptr->data; 
    ptr=ptr->next; 
} 
return out; 
} 

會工作。

+0

他重寫* list *的插入操作符。我有點自信,他想插入*列表*而不僅僅是所述列表的頭部。這是我認爲他正在努力的列舉。 – WhozCraig

+0

@WhozCraig是啊同意了,我認爲OP問題是一個[XY](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – P0W

+0

這是有點工作。它提供了大量的輸出。它輸出吉姆,鮑勃,吉爾,吉姆,吉姆,鮑勃。我不是很擅長編程,但是有可能從ostream運營商那裏查看頭部,然後繼續下一步,直到它達到零,然後輸出? –

1

list類沒有data成員,但node類具有。您必須訪問例如head->data

或者,您可能應該從head開始循環列表,並打印當前節點data成員。像:

for (node* current = head; current != nullptr; current = current->next) 
    out << current->data; 

要注意的是,你必須在構造函數初始化head,或者這將是一個未初始化的指針,並會導致不確定的行爲,當你取消對它的引用。