【问题标题】:Sorting Number Compiler Error [closed]排序数字编译器错误[关闭]
【发布时间】:2012-03-11 00:23:44
【问题描述】:

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

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

struct listnode **front,**back;
front =  malloc(sizeof(*front) * base);
back =   malloc(sizeof(*back) * base);

我得到的错误是:

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

提前感谢您的帮助。

【问题讨论】:

  • 下次请格式化您的代码。
  • 看起来您使用的是 C++,但将其标记为 C。您使用的是哪种语言?
  • @Marlon 我在 cmd 中使用 g++ 下的 C
  • 评论已删除。 (哎呀,现在这个是孤儿了。)

标签: c algorithm linked-list


【解决方案1】:

看起来您正在使用 C++ 编译器来编译您的 C 程序。要么不这样做,要么将类型转换添加到 malloc() 调用的返回值。

【讨论】:

  • 我在windows下使用g++。我将如何为 malloc 进行类型转换?
  • 在你的情况下,front = (listnode **)malloc(sizeof....)。但是为什么要使用 C++ 编译器呢?
  • 我必须让我的程序通过 gcc 或 g++ 编译器工作。我尝试了你的建议,它有效。谢谢。
  • 如果是C程序,你为什么不用gcc
  • "gcc" 现在代表“gnu 编译器集合”,它包括单独的 C 和 C++ 编译器。前端通常根据文件的名称选择要编译的语言:“foo.c”表示 C 代码,而“foo.c++”和“foo.cxx”(以及其他)表示 C++ 代码。问题是“foo.C”also 表示 C++。使用小写命名文件,或使用“-x”开关强制选择语言,以避免此问题。
【解决方案2】:

代码可以作为 C 程序正常工作。使用 .c 扩展名保存文件,然后编译它...

不过,如果你想将它编译为 C++ 程序,你需要进行强制转换

  struct listnode **front,**back;
    front =  static_cast<listnode**> (malloc(sizeof(*front) * base));
    back =   static_cast<listnode**> (malloc(sizeof(*back) * base));

原因是 C++ 是一种强类型语言,不允许像 C 那样在指针之间进行类型转换。您必须在 C++ 中明确指定这样的转换。指针之间的隐式转换是难以发现的错误的根源,因此在 C++ 中不受支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多