【问题标题】:Simple Pointer Question简单的指针问题
【发布时间】:2011-08-15 06:29:24
【问题描述】:

编辑:没关系,解决了...我在 ClassB AND ClassC ....

中声明了类型

所以我在一个名为 ClassA 的类中有一个名为 PointA 的指针。

ClassA 和 ClassB 都派生自 ClassC,其中有一个名为 type 的变量。

在一段代码中,我将 ClassB 的新实例分配给 ClassA 的 PointA 变量。指针被声明为指向ClassC,ClassB是从其中派生出来的。

然后我有一个函数,在 OtherClass(无关)中,看起来有点像这样:

void OtherClass::function_name(ClassA* A,ClassB* B) {
    B->type; //displays the correct value of type

    A->PointA->type; //displays the wrong value of type
    (A->PointA)->type; //displays the wrong value of type
}

我知道 PointA 正确地指向了 ClassB 的实例。

我在使用指针时得到不正确的 type 值是怎么回事?

【问题讨论】:

  • ClassA 和 ClassB 有什么关系?您应该发布所有代码,包括类定义。
  • 你试过A->PointA->type吗?
  • 您没有发布足够多的代码。请看sscce.org
  • 我还添加了一些代码...

标签: c++ pointers


【解决方案1】:

我怀疑您在填充 PointA 时进行了非法强制转换。 ClassB 必须是 PointA 被定义为指向( typeof(*ClassA->PointA) )的事物的子类,否则您尝试执行的操作将不起作用。

【讨论】:

    【解决方案2】:

    根据您的代码,ClassA 和 ClassB 都有一个名为 type 的成员。由于您可以使您的PointA 指向ClassA 对象或ClassB 对象,因此这些类之间必须存在父子关系(存在吗?)。如果是这样,您确定您没有创建两个完全不相关的type 成员:一个在ClassA 中,另一个在ClassB 中?您希望检查ClassB::type,但实际上您检查的是ClassA::type,这就是您看到不同(“错误”)值的原因。

    您需要发布更多代码,向我们展示如何声明类。根据您发布的内容,您只能做出疯狂的猜测......最重要的是,您发布的代码显然是“假的”,即它不是您进行实验的代码。 ClassA->PointA->type 表达式甚至无法编译。贴出真实代码。

    【讨论】:

    • 对不起,有。 ClassC...我忘了添加那个细节。固定帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多