2016-11-23 149 views
0
gcc -g -O2 struct.c -o struct 
struct.c: In function ‘secondfunction’: 
struct.c:19:2: error: cannot convert to a pointer type 
    firstfunction((void *)onedata->c,(void *)&twodata.c,2); 
    ^~~~~~~~~~~~~ 
<builtin>: recipe for target 'struct' failed 
make: *** [struct] Error 1 

我試圖通過memcpy複製結構的內容到另一個結構時使用指針。但是當我將指針傳遞給函數結構時,我不能將它轉換爲void。「無法轉換爲指針類型」通過訪問結構通過指針

struct one { 
    char a; 
    char b; 
}; 

struct two { 
    struct one c; 
    struct one d; 
}; 

void firstfunction(void *source, void *dest, int size) 
{ 
    //memcpy(dest,source,size) 
} 

void secondfunction(struct two *onedata) 
{ 
    struct two twodata; 
    firstfunction((void *)onedata->c,(void *)&twodata.c,2); 
} 

void main() 
{ 
    struct two onedata; 
    secondfunction(&onedata); 
} 
+1

作爲一個方面說明,它通常被認爲是不好的形式來做'void main()'而不是'int main()' – theKunz

+1

不要在沒有需要的情況下使用void *。並且不要向'void *'投射或從'void *'投射。 – Olaf

回答

4

你缺少符號(&):

firstfunction(&onedata->c, &twodata.c,2); 
      ^

(我刪除了不必要的鑄)。

2

你想這樣的:

void secondfunction(struct two *onedata) 
{ 
    struct two twodata; 
    firstfunction(&onedata->c, &twodata.c, 2); 
} 

你剛纔忘了&操作。

順便說一句:這裏沒有必要投到(void*)