C 排序号编译器错误

C 排序号编译器错误,c,algorithm,linked-list,C,Algorithm,Linked List,我正在尝试使用radixsort对数字列表进行排序。但是遇到了一个编译器 多次尝试后无法解决的问题 我有两个指针,一个在列表的后面,另一个在前面。 base是我用于radixsort的桶数 struct listnode **front,**back; front = malloc(sizeof(*front) * base); back = malloc(sizeof(*back) * base); 我得到的错误是: invalid conversion from void* to l

我正在尝试使用radixsort对数字列表进行排序。但是遇到了一个编译器 多次尝试后无法解决的问题

我有两个指针,一个在列表的后面,另一个在前面。 base是我用于radixsort的桶数

struct listnode **front,**back;
front =  malloc(sizeof(*front) * base);
back =   malloc(sizeof(*back) * base);
我得到的错误是:

invalid conversion from void* to listnode**[-fpermissive]

谢谢你的帮助。

看起来你是在用C++编译器编译你的C程序。要么不这样做,要么添加一个类型转换到“代码> MalCube()/<代码>的调用值。

< P>看起来,你正在使用C++编译器编译C程序。不要这样做,或者在
malloc()调用的返回值中添加类型转换。

该代码作为C程序运行良好。用.c扩展名保存文件,然后编译它

仍然,如果你想编译它作为C++程序,你需要做一个投影片

  struct listnode **front,**back;
    front =  static_cast<listnode**> (malloc(sizeof(*front) * base));
    back =   static_cast<listnode**> (malloc(sizeof(*back) * base));
struct listnode**前面,**后面;
正面=静态铸件(malloc(尺寸(*正面)*底部));
背面=静态铸件(malloc(尺寸(*背面)*底部));

原因是C++是一种强类型语言,不允许指针像C一样的类型转换。必须明确地指定C++中的此类转换。指针之间的隐式转换是硬查找bug的来源,因此在C++中不被支持。

< P>代码作为C程序工作得很好。用.c扩展名保存文件,然后编译它

仍然,如果你想编译它作为C++程序,你需要做一个投影片

  struct listnode **front,**back;
    front =  static_cast<listnode**> (malloc(sizeof(*front) * base));
    back =   static_cast<listnode**> (malloc(sizeof(*back) * base));
struct listnode**前面,**后面;
正面=静态铸件(malloc(尺寸(*正面)*底部));
背面=静态铸件(malloc(尺寸(*背面)*底部));

原因是C++是一种强类型语言,不允许指针像C一样的类型转换。必须明确地指定C++中的此类转换。指针之间的隐式转换是硬查找错误的来源,因此在C++中不被支持。

请下次格式化代码。看起来你正在使用C++,但将它标记为C。你使用哪种语言?@马龙,在CdDebug删除中使用G +下的C。(OOP,现在这是一个孤儿。)下次请格式化你的代码。看起来你正在使用C++,但是把它标记为C。你使用哪种语言?@马龙。(哦,现在这个是孤儿。)我在windows下使用g++。如何为malloc进行类型转换?在您的例子中,
front=(listnode**)malloc(sizeof…)
。但是为什么要使用C++编译器?我必须让我的程序通过GCC或G+编译器工作。我尝试了你的建议,效果很好。谢谢。如果是C程序,为什么不使用<代码> GCC < /代码>?“GCC”代表“GNU编译器集合”,它包括单独的C和C++编译器。前端通常根据文件名选择哪种语言编译:“Fo.C”是C代码,而“Fo.C++”和“Fo.CXX”(除其他)是C++代码。问题是“Fo.C”也意味着C++。用小写字母命名文件,或者使用“-x”开关强制选择语言,以避免此问题。我在windows下使用g++。如何为malloc进行类型转换?在您的例子中,
front=(listnode**)malloc(sizeof…)
。但是为什么要使用C++编译器?我必须让我的程序通过GCC或G+编译器工作。我尝试了你的建议,效果很好。谢谢。如果是C程序,为什么不使用<代码> GCC < /代码>?“GCC”代表“GNU编译器集合”,它包括单独的C和C++编译器。前端通常根据文件名选择哪种语言编译:“Fo.C”是C代码,而“Fo.C++”和“Fo.CXX”(除其他)是C++代码。问题是“Fo.C”也意味着C++。用小写字母命名文件,或使用“-x”开关强制选择语言,以避免此问题。