2011-06-18 17 views
4

挿入演算子がリストクラスで機能しない理由がわかりません。私はそれをしばらく見てきましたが、構文がオーバーロードに適していると思います。これでは分かりません。なぜそれが動作していないのかについてのヒント?コードは次のとおりです。overloaded <<挿入演算子が正しく動作していません

EDIT:現在のコードに変更されています。

申し訳ありませんが、特に問題は今、私は何も印刷せず、シンプルなプリントと空の行を印刷できないことです。ここ

はドライバーズ:

#include <iostream> 
#include "polynomial.h" 

using namespace std; 

int main(){ 
Polynomial* poly = new Polynomial();  

poly->set_coefficient(3,2); 

poly->set_coefficient(0,2); 

poly->set_coefficient(3,1); 

cout << "trying to print data" << endl; 
cout << *poly << endl;  
return 0; 
} 

はここにヘッダーです:

#ifndef _POLYNOMIAL_H_ 
#define _POLYNOMIAL_H_ 

#include <iostream> 

class Polynomial { 

public: 

struct PolyNode { 
    int coefficient, degree; 
    struct PolyNode* next;  
    PolyNode(int c, int d, PolyNode* n): coefficient(c),degree(d),next(n){} 
}; 

PolyNode* firstTerm; 
Polynomial(): firstTerm(0) {} 

struct PolyNode* get_first(){ 
    return firstTerm; 
} 


//makes the term with degree d have a coefficient of c 
void set_coefficient(int c, int d);  

~Polynomial(); 

friend std::ostream& operator<<(std::ostream& o, const Polynomial& p);   
}; 

#endif 

は、ここに実装だ:

#include "polynomial.h" 
#include <iostream> 
#include <ostream> 

using namespace std; 

void Polynomial::set_coefficient(int c, int d){ 
PolyNode* start = firstTerm; 
if(c != 0 && firstTerm == 0)  
    firstTerm = new PolyNode(c,d,NULL); 
else{ 
    cout << "Entered set_coefficient()" << endl; 
    while(start->degree != d && start->next != NULL){ 
     cout << "Inside set_coefficient() while loop" << endl;   
     start = start->next;   
    }  
    if(c != 0 && start == 0)  
     start = new PolyNode(c,d,0); 
    else if(c!= 0 && start != 0) 
     start->coefficient = c; 
    else if(c == 0){ 
     cout << "deleting a term" << endl;   
     delete start; 
    } 
} 
    cout << "Leaving set_coefficient()" << endl; 
} 

ostream& operator<<(ostream& o,const Polynomial& p){ 
Polynomial::PolyNode* start = p.firstTerm; 
for(unsigned int i = 0; start->next != 0; i++){ 
    o << "Term " << i << "'s coefficient is: " << start->coefficient << " degree is: " << start->degree << endl << flush; 
    start = start->next; 
} 
return o; 
} 
+2

「有効ではありません」は有効な問題の説明ではありません。それはコンパイルに失敗しますか?実行時にクラッシュしますか?それはクラッシュせずに実行されますが、予期しない結果を生成しますか?質問を投稿するときにそのような情報を追加してみてください。私はまた、[完璧な質問を書く](http://tinyurl.com/so-hints)を読むことをお勧めします。 –

+0

@Martinho Fernandesメインメソッドで挿入を使用するときです。それは、リストに作成された2つの用語のデータを出力するはずですが、代わりにメモリアドレスを出力します。 –

+1

@Keoki Zee。私はあなたのために1つを入れます:) –

答えて

5

polyが必要にoperator <<カスタムを使用するには、ポインタでありますたとえば

cout << *poly; // output the object pointed-to, not the pointer itself 

Polynomial*を挿入することに何の負荷がかかりません。あなたも試してはいけません。

さらに、オブジェクトをconstという参照で受け入れる必要があります。ストリーム出力演算子がオブジェクトを変更する理由はありません。

関連する問題