2012-11-13 47 views
-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**’ 
+0

它看起來像你錯過了你的頭文件的下半部分。 –

+0

malloc需要投? –

+6

這個問題與'#define'有什麼關係? –

回答

2

C++比C類型更謹慎些,所以你必須拋出你的malloc調用。就像這樣:

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

請注意,我也改變了參數上sizeof,你想要的類型不是指針類型的大小的尺寸。

最後,請勿在C++上使用malloc,請使用new

還有一件事,poly_t已經是指針類型了,您可能想要將u聲明爲poly_t u;但我不知道如何在代碼的其餘部分使用它。

1

由於C++不允許將void *隱式轉換爲另一個對象指針。你需要作出明確造型:

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

基本上,只要一個轉換是隱式的(如T *void *),相反的轉換需要一個static_cast

+0

輸出變量不是雙指針... –

+1

@ BenVoigt:Mais oui ...(你已經被C式的typedef瘋狂擊敗!) –

+0

啊...那是真實的。但是你的類型仍然不正確。你已經混合了雙重和三重間接。 –