2017-04-25 5 views
-1

Also ich versuche, den + Operator in einer einzigen verknüpften Liste zu überlasten, das Problem ist, dass mein Programm jedes Mal abstürzt, wenn ich versuche, den Code auszuführen.in meinem Code habe ich versucht, die Koeffizienten hinzuzufügen mit dem gleichen Exponenten.Und falls die Exponenten nicht gleich sind, habe ich versucht, die verschiedenen zwei Terme zu dem resultierenden Polynom hinzuzufügen. Die Insert-Funktion fügt den Begriff in einer sortierten Reihenfolge von höheren Exponenten einÜberladen + Operator in einer Polynom verknüpften Liste

polynomials polynomials:: operator + (const polynomials&p)const{ 
node*current=head; 
node*temp=p.head; 
polynomials poly; 
node *newnode=0; 
while(current!=0||temp!=0) 
{ 
    if(current->exponent==temp->exponent) 
    { 
     newnode->exponent=current->exponent; 
     newnode->coefficient=current->coefficient+temp->coefficient; 
     poly.insert(*newnode); 
     newnode=newnode->link; 
    } 
    else 
    { 
     if(current->exponent > temp->exponent) 
     { newnode->exponent=current->exponent; 
     newnode->coefficient=current->coefficient; 
     poly.insert(*newnode); 
     newnode=newnode->link;  
     newnode->exponent=temp->exponent; 
     newnode->coefficient=temp->coefficient; 
     poly.insert(*newnode); 
     } 
     else 
     { 

     newnode->exponent=temp->exponent; 
     newnode->coefficient=temp->coefficient; 
     poly.insert(*newnode); 
     newnode=newnode->link;  
     newnode->exponent=current->exponent; 
     newnode->coefficient=current->coefficient; 
     poly.insert(*newnode); 


     } 

    } 
    current=current->link; 
    temp=temp->link; 
} 

return poly;} 
+2

Es klingt wie Sie lernen müssen, können, wie ein Debugger zu verwenden, durch den Code zu treten. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: ** [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver

+0

'newnode = 0' und Sie respektieren es ... – Jarod42

+0

Ich habe tatsächlich einen Debugger benutzt und das Problem scheint in dieser Zeile zu liegen newnode-> exponential = current-> exponent; Ich bin mir nicht wirklich sicher warum? – Mhaalazri

Antwort

2

Ein Problem sehe ich zu senken.

while(current!=0||temp!=0) 

von

gefolgt
if(current->exponent==temp->exponent) 

ist nicht richtig. Wenn einer der Zeiger nullptr ist, endet die Dereferenzierung eines nullptr.

Ich würde versuchen,

while(current != nullptr && temp != nullptr) 
+0

Ich änderte, aber das Programm stürzt immer noch – Mhaalazri

+0

@Mhaalazri, es sieht aus wie Sie mehr als ein Problem in Ihrem Code haben. Die Verwendung eines Debuggers könnte die beste Option sein. –