指向动态分配的类的void指针
void pointer to a dynamically allocated class
我试图将一个void*传递给一个函数,然后在该函数内使指针指向一个动态创建的对象。这就是我目前所拥有的,但似乎不起作用:
main:
int main()
{
void* objPtr;
setPtr(objPtr);
}
setPtr:
void setPtr(void*& objPtr)
{
objPtr = new Obj1;
(*objPtr).member1 = 10; //error: expression must have pointer-to-class type
}
目标1:
struct Obj1
{
int member1;
};
提前感谢
当然:void*
不指向类类型,因此不能用于访问成员。C++是静态类型的。编译器看到一个void*
,仅此而已。它不会试图弄清楚指针实际指向的是什么类型的对象——你必须通过强制转换来告诉它:
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
实际上指向actual_type
类型的对象。
EDIT:问题所有者的问题是不同的,这个答案代表用指针对指针实现的相同的东西。请咨询Pete Becker关于正确选角的真实答案。
int main()
{
void* objPtr;
setPtr(&objPtr);
}
setPtr:
void setPtr(void** objPtr)
{
*objPtr = new Obj1; //where Obj1 is user defined class type
}
我在这里所做的只是C向指针传递,setPtr函数将一个指向void指针的指针设置为所需的值。
相关文章:
- 如何在 C++ 中将 void 函数传递给 void 指针
- 将通用引用强制转换为可调用的 void 指针,反之亦然
- C++为 void 指针分配一个字符串
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 取消引用 void 指针以将值分配给结构
- C 与 C++,处理 void** 指针
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 用非零值初始化void指针的正确(或最安全)方法
- 将 void 指针分配给另一个 void 指针
- c ++ 我是否需要手动删除指向另一个具体类型的 void* 指针?
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 如何将 std::string 赋回作为 <char>void* 指针传递的 std::vector.data()?
- 将指针传递到结构,与传递 void 指针并强制转换为结构
- 如何在void*指针下检查运行时类型(允许简单类型,没有基类)?
- 用于初始化结构的 void 指针强制转换
- 使用 void 指针:void **ptr.. 如何修改共享内存的值?
- 访问由 void 指针引用的结构的成员
- 你不能在 void 指针上使用指针算法,那么 void 指针数组是如何工作的呢?
- 如何警告 C 中 void 指针上的参数不兼容的类型
- 指向类模板方法的 void 指针的向量