typedef struct node node;
// LinkedList data structure to hold characters.
struct node {
char character;
node *link;
};
后来我尝试了:
node *tmp = malloc(sizeof (node));
我的文本编辑器中出现错误:
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
error: cannot initialize a variable of type 'node *' with an rvalue of type 'void *'
node *tmp = malloc(sizeof (node));
^ ~~~~~~~~~~~~~~~~~~~~~
1 error generated.
[Finished in 0.1s with exit code 1]
我在Xcode中遇到了同样的错误,但它在终端中使用gcc可以正常编译。怎么样?
提前致谢。
答案 0 :(得分:1)
malloc
返回void *类型。你想要的是将void *的原始缓冲区域转换为node *。
通过在(node*)
之前添加malloc
强制转换,您正在使用C样式转换。在GCC中,编译器会将未转存的内存自动匹配到node*
。但这不是C ++编译器的标准行为。同时,如果您通过添加-Wall
选项启用警告,则应该会看到错过演员的警告。
要正确解决此问题,您需要
(node *)
强制转换
extern "C" { ... }
子句包装整个代码体。#ifdef
来确定编译器是否为c ++编译器。这将确保编译器理解代码是c代码并且类型转换将正确执行。