无效指针转换错误

Void pointer conversion error

本文关键字:错误 转换 指针 无效      更新时间:2023-10-16

这是我的代码

保利·

#include "gf.h"    
typedef struct polynome {
int deg, size;
gf_t * coeff;
} * poly_t; /* polynomial has coefficients in the finite field */
class Polinomio{
   public:
     int poly_degppf(poly_t g);

聚.cpp

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "gf.h"
#include "poly.h"
Polinomio::Polinomio(int n){
    printf("Hola como estas");
}
int Polinomio::poly_degppf(poly_t g) {
int i, d, res;
poly_t *u;
d = poly_deg(g);
u = malloc(d * sizeof (poly_t*));

为什么我会收到此错误?

poly.cpp: In member function ‘int Polinomio::poly_degppf(polynome*)’:
poly.cpp:261: error: invalid conversion from ‘void*’ to ‘polynome**’

C++对类型比C更谨慎一些。所以你必须投出你的malloc电话。喜欢这个:

u = (poly_t*)malloc(d * sizeof (poly_t));

请注意,我还更改了 sizeof 上的参数,您希望类型的大小而不是指向类型的指针的大小。

最后,不要在C++上使用malloc,使用new

还有一件事,poly_t已经是指针类型,您可能希望将u声明为poly_t u; 但我不知道您如何在其余代码中使用它。

因为C++不允许将void *隐式转换为另一个对象指针。您需要使强制转换显式:

u = static_cast<polynome**>(malloc(d * sizeof(polynome*)));

基本上,每当一个转换是隐式的(例如T *void *),相反的转换都需要static_cast