无法在 Borland C++ 中将'void*'转换为 *poly 节点错误

cannot convert 'void*' to *poly node error in borland c++

本文关键字:转换 poly 节点 错误 void 中将 Borland C++      更新时间:2023-10-16

美好的一天!我正在使用 Borland C++ 在 DSA 中进行作业,并且我正在寻找一个使用链表实现加和乘多项式的示例。

幸运的是,我找到了 1 个适合我的任务。

但唯一的问题是它给了我一个错误,它指出:

"无法将'void*'转换为'polyNode*'

帮我解决这个问题。

下面是示例代码:

#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;
}
编译器

将根据编译器设置发出警告或错误(您可以对其进行设置,以便不再将其标记为错误)。但我会做以下事情...malloc 返回一个 void*,这会导致类型不匹配,因为您将其分配给多边形指针。如果将返回值强制转换为适当的类型,这应该可以消除错误,如下所示:

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

所有其他分配的同上。