2017-03-06 68 views
1

我有以下简单的代码:的malloc不是铸造结构

该结构的第一次使用,f工作正常,但我不能为的malloc n - 我得到一个错误,它无效*不能被分配给myValues *。我知道我不应该投射malloc,那我该怎么做呢?怎么了?

确切的错误:

a value of type "void *" cannot be assigned to an entity of time "myValues *"

#include <stdio.h> 
#include <stdlib.h> 

typedef struct values 
{ 
int a; 
char c; 
void *pv; 
values *next; 
} myValues; 

int main(){ 
    myValues f; 
    myValues *n = malloc(sizeof(myValues)); 
} 
+1

显示确切的错误消息。 –

+1

您使用C++作为C. – BLUEPIXY

+1

您知道类型转换是什么吗? – ysap

回答

5

显而易见的是,该程序被编译为C++程序。否则,编译器会发出错误,名称values未被声明用于结构定义。

typedef struct values 
{ 
int a; 
char c; 
void *pv; 
values *next; 
^^^^^^ 
} myValues; 

如果是这样,你必须编写

myValues *n = (myValues *)malloc(sizeof(myValues)); 

因为void *类型的指针不能隐式转换为另一种类型的指针。

(或者需要完全重写程序,例如代入函数malloc的用于使用操作new的所述呼叫的C++程序。)

或者你应该编译该程序作为一个C程序。在这种情况下,您必须编写

typedef struct values 
{ 
int a; 
char c; 
void *pv; 
struct values *next; 
^^^^^^^^^^^^^ 
} myValues; 
+0

更好的是,你应该为C++案例推荐'myValues * n = new myValues()'。 – zwol

+0

@zwol我想到了这一点,但我决定他有可能将程序编译为C程序,即使他使用C++编译器。 –

+0

所以基本上这个问题(使用C编译器)是编译器不知道'values'?为什么它与malloc有关?因为malloc也与struct中的对象有关? –