Ошибка преобразования пустого указателя

Вот кроме моего кода

poly.h

#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);

poly.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**’

-3

Решение

C ++ немного более осторожен с типами, чем C. malloc вызов. Как это:

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

Обратите внимание, что я также изменил параметр на sizeofВы хотите, чтобы размер типа не размер указателя на тип.

Наконец, не используйте malloc на C ++ используйте new,

Еще кое-что, poly_t это уже тип указателя, вы, вероятно, хотите объявить u как раз poly_t u; Но я не знаю, как вы используете его в остальной части кода.

2

Другие решения

Потому что C ++ не позволяет неявное преобразование void * на другой указатель объекта. Вы должны сделать приведение явным:

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

По сути, всякий раз, когда одно преобразование неявно (например, T * в void *), обратное преобразование требует static_cast,

1

По вопросам рекламы [email protected]