我正在尝试将void*传递给函数,然后在该函数内部使指针指向动态创建的对象.这是我到目前为止,但它似乎没有工作:
主要:
int main()
{
void* objPtr;
setPtr(objPtr);
}
Run Code Online (Sandbox Code Playgroud)
setPtr:
void setPtr(void*& objPtr)
{
objPtr = new Obj1;
(*objPtr).member1 = 10; //error: expression must have pointer-to-class type
}
Run Code Online (Sandbox Code Playgroud)
OBJ1:
struct Obj1
{
int member1;
};
Run Code Online (Sandbox Code Playgroud)
提前致谢
确定:a void*不指向类类型,因此不能用于访问成员.C++是静态类型的.编译器看到了void*那就是那个.它不会试图找出指针实际指向的对象类型 - 你必须用一个强制转换来告诉它:
objPtr->whatever; // fails: objPtr is not a pointer-to-class-type
((actual_type*)objPtr)->whatever; // okay: cast to actual_type*
Run Code Online (Sandbox Code Playgroud)
嗯,这就是我的C程序员.有些人喜欢在static_cast这里使用:
static_cast<actual_type*>(objPtr)->whatever; // okay: cast to actual_type*
Run Code Online (Sandbox Code Playgroud)
但是,无论如何,您必须确保objPtr实际上指向类型的对象actual_type.
| 归档时间: |
|
| 查看次数: |
5739 次 |
| 最近记录: |