当我尝试malloc()
struct bstree
节点时,我的编译器报告错误:
来自' void *'的无效转换到' bstree *'
这是我的代码:
struct bstree {
int key;
char *value;
struct bstree *left;
struct bstree *right;
};
struct bstree *bstree_create(int key, char *value) {
struct bstree *node;
node = malloc(sizeof (*node));
if (node != NULL) {
node->key = key;
node->value = value;
node->left = NULL;
node->right = NULL;
}
return node;
}
答案 0 :(得分:8)
在C ++中,没有从类型void *
到其他类型的指针的隐式转换。您必须指定显式转换。例如
node = ( struct bstree * )malloc(sizeof (*node));
或
node = static_cast<struct bstree *>( malloc(sizeof (*node)) );
同样在C ++中,您应该使用运算符new
而不是C函数malloc
。
答案 1 :(得分:2)
在C中,您的代码是&#34;罚款&#34;。
在C ++中,您想要定义一个构造函数:
struct bstree {
int key;
char *value;
bstree *left;
bstree *right;
bstree (int k, char *v)
: key(k), value(v), left(NULL), right(NULL)
{}
};
然后使用new
,例如:node = new bstree(key, value);
。
答案 2 :(得分:0)
演员会修复此错误:
node = (struct bstree *) malloc(sizeof (*node));
我已经展示了一个C风格的演员阵容,因为代码似乎是C.还有一个C ++风格的演员阵容:
node = static_cast<struct bstree *>(malloc(sizeof (*node)));