这是什么错converting from ‘unsigned int (ScanManager::*)(char*, unsigned int)’ to ‘void*’ [-Wpmf-conversions]
时间: 2023-03-06 15:22:05 浏览: 71
这是一个指针类型不匹配的编译错误,其中试图将一个成员函数指针转换为一个void指针,而这种类型转换通常是不安全的。
更具体地说,该错误指出了在尝试将一个名为 `ScanManager::*` 的成员函数指针转换为一个 `void*` 指针时出现了问题。这可能是因为您在代码中尝试了类似以下的操作:
```
ScanManager scanner;
void* ptr = &scanner.scan; // 试图将成员函数指针转换为void指针
```
这种类型的转换可能会导致未定义的行为,因为成员函数指针需要知道其所属的类的指针才能调用,而 `void*` 类型没有足够的信息来进行这种调用。
要解决这个问题,您可能需要重新考虑代码逻辑,以避免将成员函数指针转换为 `void*`。如果您确实需要将函数指针传递给某个函数,可以考虑使用函数指针类型或std::function类型进行类型匹配。
相关问题
这个报错是什么意思 [Warning] converting to non-pointer type 'unsigned char' from NULL [-Wconversion-null]
这个报错的意思是将 NULL 转换为非指针类型 'unsigned char',可能会导致一些潜在的问题,因为 NULL 实际上是一个指针常量,表示指针不指向任何有效的内存地址。建议检查代码,确保正确使用了指针和非指针类型,并避免使用 NULL 来赋值给非指针类型的变量。可以使用 0 或 '\0' 来表示空值,而不是使用 NULL。
ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
这个错误是因为在使用字符串常量 "abc" 和 "bdc" 时,将其直接赋值给了 char* 类型的 name 变量,这是不被允许的。在 C++ 中,字符串常量是 const char* 类型的,因此将其直接赋值给 char* 类型的变量会导致编译器报错。
要解决这个问题,可以将 char* 类型的 name 变量改为 const char* 类型,或者使用 strcpy 函数将字符串常量复制到动态分配的内存中。例如,可以将 namelist 类的构造函数修改为:
```
namelist(const char *p) {
name = new char[strlen(p) + 1];
if (name != nullptr) {
strcpy(name, p);
}
}
```
同时,在主函数中创建对象时也需要使用 const char* 类型的字符串常量,例如:
```
namelist n1("abc"), n2("bdc");
```
这样就可以避免这个错误了。