c - 'void*' 到 'struct*' 的无效转换

标签 c struct type-conversion malloc

<分区>

我是 C 的初学者。我正在尝试解决一些问题。编译代码时出现此错误。

[Error] invalid conversion from 'void*' to 'triangle*' [-fpermissive]

代码和目的解释如下。

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

struct triangle
{
    int a;
    int b;
    int c;
};

typedef struct triangle triangle;

//sort_by_area() function is here
int main()
{
    int n;
    scanf("%d", &n);
    triangle *tr = malloc(n * sizeof(triangle));
    for (int i = 0; i < n; i++) {
        scanf("%d%d%d", &tr[i].a, &tr[i].b, &tr[i].c);
    }
    sort_by_area(tr, n);
    for (int i = 0; i < n; i++) {
        printf("%d %d %d\n", tr[i].a, tr[i].b, tr[i].c);
    }
    return 0;
}

如您所见,我有结构,我尝试根据输入量为其分配内存。并尝试将它用于 sort_by_area 功能。但问题是 triangle *tr = malloc(n * sizeof(triangle)); 行给我上面提到的错误。

此代码也适用于在线编译器。我尝试使用默认设置在 DEV C++ 上运行此代码。我不知道版本和更改我的编译器的版本。我什至不知道它是否与编译器版本有关。但我想知道为什么我会收到此错误。背后的逻辑是什么。

最佳答案

这看起来像 C 代码,但您正在使用 C++ 编译器进行编译。因此,它在您提到的行上提示,因为 malloc 返回 void * 但您将结果分配给 triangle *

在 C++ 中,为此需要显式转换。在 C 中,void * 可以隐式转换为任何对象指针类型或从任何对象指针类型转换。

由于这似乎是 C 代码而不是 C++ 代码,您应该使用 C 编译器进行编译。

关于c - 'void*' 到 'struct*' 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52739894/

相关文章:

比较 C 中两个字符串的排列

objective-c - 读取 9 位、10 位或 11 位(精确) block 中的数据并在 Objective-C/C 中转换为整数

C中计算一行中的字符数

iOS/Objective-C - struct objc_class * 和 struct objc_object *

c++ - 转换函数/运算符,静态解析函数还是转换构造函数?

c++ - 在 C++ 中创建一个只有用户可以查看和编辑该文件的权限的文件

c - c 中结构的大小等于 1

iphone - 从 NSMutableArray 添加和提取结构

mysql - mysql函数是否可以在输入时接受空数据类型?

javascript - 将字符串转换为日期时间