3

我正在尝试将 void* 传递给函数,然后在该函数内部使指针指向动态创建的对象。这是我到目前为止所拥有的,但它似乎不起作用:

主要的:

int main()
{
  void* objPtr;

  setPtr(objPtr);
}

设置指针:

void setPtr(void*& objPtr)
{
  objPtr = new Obj1; 
  (*objPtr).member1 = 10; //error: expression must have pointer-to-class type
}

对象1:

struct Obj1
{
  int member1;
};

提前致谢

4

2 回答 2

6

好吧,当然:avoid*不指向类类型,因此不能用于访问成员。C++ 是静态类型的。编译器看到 avoid*就是这样。它不会试图找出指针实际指向的对象类型——你必须通过强制转换来告诉它:

objPtr->whatever; // fails: objPtr is not a pointer-to-class-type

((actual_type*)objPtr)->whatever; // okay: cast to actual_type*

嗯,这就是我的 C 程序员。有些人喜欢在static_cast这里使用:

static_cast<actual_type*>(objPtr)->whatever; // okay: cast to actual_type*

但是,无论你怎么做,你都必须确保它objPtr实际上指向一个 type 的对象actual_type

于 2012-09-03T01:27:51.750 回答
0

编辑:问题所有者的问题原来是不同的,这个答案代表着用指向指针的指针实现的同一件事。请咨询 Pete Becker 关于正确铸造的真实答案。

int main()
{
  void* objPtr;

  setPtr(&objPtr);
}

设置指针:

void setPtr(void** objPtr)
{
  *objPtr = new Obj1; //where Obj1 is user defined class type
}

我在这里所做的只是 C-way 指针传递,setPtr 函数接受一个指向 void 指针的指针,并按预期设置 void 指针。

于 2012-09-03T01:19:03.883 回答