【问题标题】:Is it possible to access a derived object from another derived object both using the same base class? [duplicate]是否可以使用相同的基类从另一个派生对象访问派生对象? [复制]
【发布时间】:2015-01-24 19:24:57
【问题描述】:

我有一个抽象基类Object 和两个派生类:PaddleBallPaddle 的构造函数接受一个指向Ball 的指针作为参数,这样我就可以得到它的位置来计算桨的运动:

Paddle::Paddle(Vec location, Vec size, float AIspeed, Ball* prtBall)
    :  Object(location, size)
{
    /* ... */
    gameBall = ptrBall;
}

IntelliSense 不会将此标记为无效,但每当我编译代码时,VS2013 都会意外抛出以下错误:

1>\object\paddle.h(8): error C2061: syntax error : identifier 'Ball'
1>\object\paddle.h(43): error C2143: syntax error : missing ';' before '*'
1>\object\paddle.h(43): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>\object\paddle.h(18): error C2065: 'gameBall' : undeclared identifier
1>\object\paddle.h(18): error C2065: 'ptrBall' : undeclared identifier
1>\object\paddle.h(30): error C2065: 'gameBall' : undeclared identifier

前两个特别有趣...从外观上看,编译器没有识别出Ball* 是一种类型。第 8 行是上述第 40-44 行:

private:
    void Foo();

    Ball* gameBall;
    float bar;

起初我以为我忘了在文件paddle.h 中包含Ball 的定义。但这种情况并非如此。我正在做的事情是正确的还是目前被忽略的缺陷?

【问题讨论】:

标签: c++ class inheritance compiler-errors


【解决方案1】:

是的,前提是对兄弟数据成员或方法的访问权限是公开的。

兄弟姐妹无权访问其他兄弟姐妹的私有或受保护数据方法和数据成员。

您可以在 Parent 类中创建一个虚拟方法。然后一个兄弟姐妹可以通过父节点(通过函数)获取数据;但是正如我所了解的那样,当您直接与您的兄弟姐妹交谈而不是通过父母交谈时,生活会更好。 :-)

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2016-03-31
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多