void指向动态分配的类的指针

Log*_*ker 3 c++ void-pointers

我正在尝试将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)

提前致谢

Pet*_*ker 6

确定: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.

  • @LoganBesecker - `(actual_type*)objPtr-> whatever`说假装`objPtr-> whatever`的类型是`actual_type*`.当你第一次接触到这些东西时,这是一个容易犯的错误. (3认同)