2015-10-15 54 views
-2

我有一個小問題把我的鏈接列表< <運算符。下面的代碼:編譯器不使用運算符<<

ostream& operator<<(ostream& o,const Node& f) 
{ 
    Node *p = new Node(f.val); 
    p->next = f.next; 
    p->prev = f.prev; 
    o << "["; 
    while(p->next->val != -1) 
    { 
     p = p->next; 
     o << p->val << " "; 
    } 
    o << "]" << endl; 
    delete p; 
    return o; 
} 

所以,當我用它在main(),它看起來是這樣的:

BiQueue bq(); 
bq.Push(5); 
... 
cout << bq.getFirst(); 

但是經過測試,運營商只是不運行,輸出一個內存地址。 所以我直接測試它: cout << first;(其中第一個是Node *),它輸出一個內存地址,所以操作員沒有被使用。

+0

你是否在類BiQueue中聲明瞭'ostream&operator <<(ostream&o,const Node&f)'作爲朋友函數? – user1

+0

是的,它是一個朋友功能 – user3741975

+0

不相關:動態分配一個節點對象只是爲了能夠流式傳輸看起來很浪費。 – juanchopanza

回答

2

您告訴編譯器如何打印Node,但您打印Node *。這些是不同的類型。要獲得您想要的行爲,請嘗試cout << *first;cout << *bq.getFirst();

2

運算符只是不運行,輸出是內存地址。

取而代之的是:

Node *first = ...; 
cout << first; 

你需要這樣的:

Node &first = ...; 
cout << first; 

否則你傳遞一個指針operator<<