initialization of ‘Node *’ {aka ‘struct node *’} from incompatible pointer type ‘DT *’ {aka ‘struct Student *’} [-Wincompatible-pointer-types]
时间: 2023-06-09 21:02:30 浏览: 187
这个错误通常出现在结构体指针类型不匹配的情况下。检查你的代码是否在使用结构体指针时出现了类型不匹配的情况,例如将一个结构体指针赋值给不同类型的结构体指针或者将一个结构体指针传递给不同类型的函数参数。如果是这种情况,需要确保结构体指针的类型是一致的。另外,还有可能是结构体定义或声明出现了错误,需要仔细检查代码。
相关问题
error: initialization of ‘void (*)(struct net_device *, unsigned int)’ from incompatible pointer type ‘void (*)(struct net_device *)’ [-Werror=incompatible-pointer-types]
这个错误通常是因为函数的参数类型不匹配。您需要检查函数的声明和定义,确保它们的参数和返回值的类型都匹配。在这种情况下,编译器提示您的是函数指针类型不匹配,需要将函数指针的参数类型修改为与函数定义的参数类型一致。
比如,如果您的函数定义是这样的:
```c
void foo(struct net_device *dev);
```
那么对应的函数指针类型应该是这样的:
```c
void (*func)(struct net_device *);
```
而不是这样的:
```c
void (*func)(struct net_device *, unsigned int);
```
您需要将函数指针类型修改为与函数定义的参数类型一致,这样就可以消除这个错误了。
error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] .write =myled_write,
这个错误是因为你在给一个结构体变量中的函数指针赋值时,函数指针的类型和结构体定义中的类型不一致。你需要检查一下函数指针的类型是否和结构体定义中的类型完全一致,包括参数类型和返回值类型。
如果你确定函数指针的类型是正确的,你可以使用类型转换来解决这个问题,如下所示:
```c
struct led_operations myled_ops = {
.write = (ssize_t (*)(struct file *, const char __user *, size_t, loff_t *))myled_write,
// 其他函数指针的赋值
};
```
在上面的代码中,我们使用了类型转换 `(ssize_t (*)(struct file *, const char __user *, size_t, loff_t *))` 将 `myled_write` 的类型转换成了 `ssize_t (*)(struct file *, const char __user *, size_t, loff_t *)`,这样就可以避免编译器报出 `incompatible pointer type` 的错误了。但是在进行类型转换时,需要你自己保证转换后的类型和原本的类型是一致的,否则可能会引发其他问题。
阅读全文