gpt4 book ai didi

c++ - 空指针 : how to use as a general class pointer?

转载 作者:太空宇宙 更新时间:2023-11-04 14:41:31 24 4
gpt4 key购买 nike

我有两个 cpp 类,假设是 ClassA 和 ClassB。我有两个指向该类的指针,比方说 pointerA 和 pointerB。现在我有一个通用的 void* 指针,我想根据某些条件指向 ClassA 或 ClassB。在这种情况下得到错误 error C2227: left of '->GetPosition' must point to class/struct/union/generic type type is 'void *'。

如何避免这种错误?

ClassA { 
void GetPosition();
}

ClassB {
void GetPosition();
}

main() {

ClassA *pointerA;
ClassB *pointerB;
void *generic_pointerAorB;

pointerA = GetAddrOfClassA();
pointerB = GetAddrOfClassB()

generic_pointer = pointerA;

//********************** error at the code below ******************************
//error C2227: left of '->GetPosition' must point to class/struct/union/generic type.
//type is 'void *'

generic_pointer->GetPosition();

//*****************************************************************************



}

最佳答案

void 指针没有名为 GetPosition 的方法,并且指针本身不可能知道它指向您的某个类,因为它存储了内存地址,而不是类型。您需要使用强制转换:

reinterpret_cast<ClassA*>(generic_pointerAorB)->GetPosition();

但老实说,您应该做些别的事情 - 从一些具有 virtual GetPosition() 方法的基类派生类,然后声明一个指向基类的指针。

class Base{
virtual void GetPosition();

ClassA: public Base {
void GetPosition();
}

ClassB: public Base {
void GetPosition();
}

main(){
Base* basePointer;
// <-- other code here
basePointer = pointerA;
basePointer->GetPosition();

关于c++ - 空指针 : how to use as a general class pointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22351181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com