2016-07-11 24 views
-4

Guten Tag! Ich benutze Borland C++, um meine Zuweisung in DSA zu machen, und ich suche nach einem Beispiel für das Hinzufügen und Multiplizieren von Polynomen mithilfe der Linked List-Implementierung.kann 'void *' nicht in * poly knotenfehler in borland konvertieren C++

Zum Glück habe ich 1 gefunden, die zu meiner Aufgabe passt.

Aber das einzige Problem ist, dass es mir ein Fehler gibt, die es heißt:

„Can not 'void *' auf 'polyNode *' konvertieren

Hilf mir, dieses Problem zu beheben .

Hier ist der Beispielcode:

#include<stdio.h> 
#include<malloc.h> 
typedef struct polyNode *polyPointer; 

struct polyNode { 
int coef; 
int expon; 
polyPointer link; } polyNode; 

void printPoly(polyPointer); 
void insertTerm(int,int,polyPointer); 
polyPointer addPoly(polyPointer,polyPointer); 

main() 
{ 
    polyPointer p1,p2,p3; 
    p1=malloc(sizeof(polyNode)); 
    p1->link=NULL; 

    p2=malloc(sizeof(polyNode)); 
    p2->link=NULL; 

    insertTerm(2,2,p1); 
    insertTerm(5,5,p1); 
    insertTerm(7,4,p2); 
    insertTerm(-3,0,p2); 
    insertTerm(4,4,p2); 
    p3=addPoly(p1,p2); 
    printf("\n");    
    printPoly(p3); 
    printf("\n"); 
    printPoly(p2); 
    printf("\n"); 
    printPoly(p1); 
} 

void insertTerm(int coef,int expon,polyPointer root) 
{ 
    if(root->link) 
    {     
     while(root->link && root->link->expon>=expon) 
     root=root->link; 
    } 

    if(root->expon==expon) 
    { 
     root->coef+=coef; 
     return; 
    } 

    polyPointer temp; 
    temp=malloc(sizeof(polyNode)); 
    temp->coef=coef; 
    temp->expon=expon; 

    temp->link=root->link; 
    root->link=temp; 
} 

void printPoly(polyPointer root) 
{ 
    printf("\n"); 
    while(root->link) 
    { 
     printf("(%dx^%d)+",root->link->coef,root->link->expon); 
     root=root->link; 
    } 
} 

polyPointer addPoly(polyPointer p1, polyPointer p2) 
{ 
    polyPointer p3; 
    p3=malloc(sizeof(struct polyNode)); 
    p3->link=NULL; 

    while(p1->link && p2->link) 
    { 
     while(p2->link && (p1->link->expon >= p2->link->expon)) 
     { 
      insertTerm(p2->link->coef,p2->link->expon,p3); 
      p2=p2->link; 
     } 

     while(p2->link && p1->link && (p2->link->expon >= p1->link->expon)) 
     { 
      insertTerm(p1->link->coef,p1->link->expon,p3);printf("1"); 
      p1=p1->link; 
     } 
    } 

    while(p1->link) 
    { 
     insertTerm(p1->link->coef,p1->link->expon,p3); 
     p1=p1->link; 
    } 

    while(p2->link) 
    { 
     insertTerm(p2->link->coef,p2->link->expon,p3); 
     p2=p2->link; 
    } 

    return p3; 
} 
+2

können Sie einen Code schreiben? –

+0

Veröffentlichen und formatieren Sie den Code ** in Ihrer Frage **. Und beachte dies: Es sollte mehr sein als nur das, denn der erste Fehler, den wir bekommen, ist, dass der Compiler keine Ahnung hat, was ein "PolyPointer" ist. [Minimales, * vollständiges * und verifizierbares Beispiel] (https://stackoverflow.com/help/mcve) steht auf dem Menü. – WhozCraig

+0

Fügen Sie den Code hinzu, indem Sie Ihre ursprüngliche Frage bearbeiten, fügen Sie sie nicht so in den Kommentaren hinzu. –

Antwort

1

Compiler geben je nach Compiler-Einstellungen Warnungen oder Fehler aus (Sie könnten sie möglicherweise so einstellen, dass sie nicht mehr als Fehler gekennzeichnet werden). Aber ich würde Folgendes tun ... malloc gibt eine void * zurück und dies verursacht eine Typabweichung, da Sie sie einem polyPointer zuweisen. Wenn Sie den Rückgabewert in den entsprechenden Typ werfen, sollte dies den Fehler wie in eliminieren:

p1= (polyPointer)malloc(sizeof(polyNode)); 

idem für alle anderen Zuweisungen.