12 54 C:\Users\86198\Desktop\广度优先遍历,深度优先遍历.cpp [Error] invalid conversion from 'void*' to 'node*' [-fpermissive]
时间: 2023-06-19 14:05:47 浏览: 78
这个错误提示是因为你在代码中使用了 C++ 中的类型转换,但转换的类型不匹配。具体来说,你将 `void*` 类型转换为 `node*` 类型,但是编译器认为这种类型转换是不安全的,因为 `void*` 可以指向任何类型的指针,而编译器不知道你实际上转换的是哪种类型的指针。
要解决这个错误,你可以使用 C++ 中的强制类型转换(也称为显式类型转换),例如 `static_cast` 或 `reinterpret_cast`。在转换的时候,你应该确保转换的类型是正确的,以避免出现运行时错误。
举个例子,如果你有一个 `void*` 类型的指针,想要将它转换为 `node*` 类型的指针,可以使用如下的强制类型转换:
```
void* ptr = ...; // 假设有一个 void* 类型的指针
node* node_ptr = static_cast<node*>(ptr); // 转换为 node* 类型的指针
```
注意,这个例子只是一个示例,具体的转换方式可能会因为你的代码而有所不同。
相关问题
遍历链表.h文件和.cpp用case输出应该怎么写?
假设链表节点的定义为:
```c++
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
```
遍历链表的.h文件和.cpp文件的代码如下:
.h文件:
```c++
#ifndef LINKED_LIST_H
#define LINKED_LIST_H
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
void traverseList(ListNode* head);
#endif
```
.cpp文件:
```c++
#include "linked_list.h"
#include <iostream>
using namespace std;
void traverseList(ListNode* head) {
ListNode* curr = head;
while (curr != NULL) {
cout << curr->val << " ";
curr = curr->next;
}
cout << endl;
}
int main() {
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
traverseList(head);
return 0;
}
```
使用`switch case`语句输出可以这样写:
```c++
#include "linked_list.h"
#include <iostream>
using namespace std;
void traverseList(ListNode* head) {
ListNode* curr = head;
while (curr != NULL) {
cout << curr->val << " ";
curr = curr->next;
}
cout << endl;
}
int main() {
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
int code;
cin >> code;
switch (code) {
case 1:
traverseList(head);
break;
default:
cout << "Invalid code" << endl;
break;
}
return 0;
}
```
此时输入1即可输出链表的内容。
90 68 C:\Users\隔壁王肥肥\Desktop\未命名1.cpp [Error] invalid conversion from 'void*' to 'void* (*)(void*)' [-fpermissive]
这个错误提示是因为你在使用线程创建函数`pthread_create`时,第三个参数需要传入一个函数指针,该函数指针指向的函数需要返回一个 void* 类型的指针,并且需要接受一个 void* 类型的参数。而你传入的函数指针类型可能不符合这个要求,导致编译器报出了这个错误。
你可以检查一下你传入的函数指针类型是否符合要求,并根据需要进行类型转换。另外,编译器提示 `-fpermissive` 可能是你编译时开启了宽松模式,建议关闭宽松模式以便更好地发现程序中的潜在问题。