以下是我的代码
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**’
答案 0 :(得分:2)
C ++对于类型比C更谨慎。所以你必须投出你的malloc
电话。像这样:
u = (poly_t*)malloc(d * sizeof (poly_t));
请注意,我还更改了sizeof
上的参数,您希望类型的大小不是指向该类型的指针的大小。
最后,不要在C ++上使用malloc
,请使用new
。
还有一件事,poly_t
已经是一个指针类型了,您可能希望将u
声明为poly_t u;
但我不知道您是如何在其余部分使用它的代码。
答案 1 :(得分:1)
因为C ++不允许将void *
隐式转换为另一个对象指针。你需要明确表达:
u = static_cast<polynome**>(malloc(d * sizeof(polynome*)));
基本上,只要一个转化是隐式的(例如T *
到void *
),相反的转换需要static_cast
。