无效指针转换错误

时间:2012-11-13 21:52:24

标签: c++ void-pointers

以下是我的代码

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

2 个答案:

答案 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