-3

ここに私のコードの例外があります

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

2 に答える 2

2

C++ は、C よりも型について少し慎重です。そのため、malloc呼び出しをキャストする必要があります。このような:

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

のパラメーターも変更したことに注意してくださいsizeof。型へのポインターのサイズではなく、型のサイズが必要です。

malloc最後に、 C++ では使用しないでくださいnew

もう 1 つpoly_tは、既にポインター型です。おそらく次のように宣言する必要がありuますpoly_t u;が、コードの残りの部分でどのように使用しているかはわかりません。

于 2012-11-13T21:54:04.097 に答える
1

void *C++ では、別のオブジェクト ポインターへの暗黙的な変換が許可されていないためです。キャストを明示的にする必要があります。

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

基本的に、1 つの変換が暗黙的に行われる場合 ( T *toなどvoid *)、反対の変換にはstatic_cast.

于 2012-11-13T21:54:50.880 に答える