是否可以使用相同的基类从另一个派生对象访问派生对象?

时间:2015-01-24 19:24:58

标签: c++ class inheritance compiler-errors

我有一个抽象的基础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行是上面的第8行,第40-44行:

private:
    void Foo();

    Ball* gameBall;
    float bar;

起初我以为忘了在文件Ball中加入paddle.h的定义。但这种情况并非如此。我正在做的是正确的还是目前忽视了一个缺陷?

1 个答案:

答案 0 :(得分:0)

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

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

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