Вот кроме моего кода
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**’
C ++ немного более осторожен с типами, чем C. malloc
вызов. Как это:
u = (poly_t*)malloc(d * sizeof (poly_t));
Обратите внимание, что я также изменил параметр на sizeof
Вы хотите, чтобы размер типа не размер указателя на тип.
Наконец, не используйте malloc
на C ++ используйте new
,
Еще кое-что, poly_t
это уже тип указателя, вы, вероятно, хотите объявить u
как раз poly_t u;
Но я не знаю, как вы используете его в остальной части кода.
Потому что C ++ не позволяет неявное преобразование void *
на другой указатель объекта. Вы должны сделать приведение явным:
u = static_cast<polynome**>(malloc(d * sizeof(polynome*)));
По сути, всякий раз, когда одно преобразование неявно (например, T *
в void *
), обратное преобразование требует static_cast
,