-3

这是我的代码的一个例外

多边形.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);

聚.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**’
4

2 回答 2

2

C++ 对类型比 C 更谨慎一些。所以你必须malloc调用。像这样:

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

请注意,我还更改了 on 参数sizeof,您想要的是类型的大小而不是指向该类型的指针的大小。

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

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

于 2012-11-13T21:54:04.097 回答
1

因为 C++ 不允许将 a 隐式转换为void *另一个对象指针。您需要使演员表明确:

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

基本上,只要一个转换是隐式的(例如T *to void *),相反的转换就需要一个static_cast.

于 2012-11-13T21:54:50.880 回答