从'`A**`'到"无效**"的转换无效
Invalid conversion from '`A**`' to '`void**`
#include <iostream>
using namespace std;
class A
{
public:
A(int x){ a = x;}
~A();
private:
int a;
};
int main()
{
A* a = new A(10);
void** p;
p = &a;
return 0;
}
使用g++ (GCC) 4.1.2 20080704编译后,我得到以下错误:
test.cpp: In function '
int main()
':
test.cpp:17:错误:从'A**
'到'void**
'无效转换
一颗星太多了。void*
已经可以保存任何指针,不需要强制转换:
int main()
{
A* a = new A(10);
void* p;
p = &a;
return 0;
}
这适用于多个级别,甚至:
int main()
{
A* a = new A(10);
A** aa = &a;
A*** aaa = &aa;
void* p = &aaa;
}
因为A***
是指向A**
的指针。
您需要使用reinterpret_cast
:
这纯粹是一个编译器指令,指示编译器将
expression
的位序列(对象表示)视为new_type
类型。
在本例中,您的expression
将为&a
,类型为A**
, new_type
类型为void**
:
p = reinterpret_cast<void**>(&a);
这里要小心,因为c++并不是真的喜欢void
类型,你的代码很可能会违反类型别名规则。
在我看来,转换为void**
是可能应该使用模板的指示。没有看到你的代码,我不能保证,但是,如果你想在评论中给我更多的信息,也许我可以帮助。
如果不能隐式转换,则不能将一种类型(A**
)的值赋给另一种类型(void**
)的变量。您需要显式地将值从一种类型转换为另一种类型:
class A
{
public:
A(int x){ a = x;}
~A();
private:
int a;
};
int main()
{
A* a = new A(10);
void** p;
// use `reinterpret_cast'
p = reinterpret_cast<void**>(&a);
// C-style cast works but it is a bad practice in C++
p = (void**)&a;
return 0;
}
相关文章:
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- is_same和variadic模板编译时错误无效转换
- 如何将常量无效*转换为istream?
- 无效* 转换获得意外输出
- 无法确定为什么函数调用中从 char* 到 char 的无效转换
- 在这个简单函数中从'char'到'const char*'的无效转换
- C++从 'const char*' 到 'char*' Arduino Uno 的无效转换
- 如何修复C++中的"错误:从'int'到'const char*'[-fallowive]的无效转换?
- C 错误:从(基类模板)到子类的无效转换
- 如何将常量无效*转换为无符号字符*
- 函数模板中的无效转换错误,返回值取决于其泛型类型
- 常量正确性编译错误到模板函数中的无效转换错误
- 从"char"到"const char*"的无效转换[-fpermissive](idk why)
- 从“ void*”到“ pthread_t*”的无效转换
- 当函数调用时,试图阻止数组更改时发生无效转换错误
- 使用基类中定义的函数返回指向派生类实例的指针时发生无效转换错误
- C++从字符到常量字符*的无效转换
- ALL_OF从'char'到'const char*'的无效转换 [-允许]
- C和C++上的无效转换错误
- C++ 在模板专用化中从 strcmp() 中的 'char' 到 'const char*' 的无效转换