我有一个抽象的基础Object
类和两个派生类:Paddle
和Ball
。 Paddle
的构造函数接受一个指向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
的定义。但这种情况并非如此。我正在做的是正确的还是目前忽视了一个缺陷?
答案 0 :(得分:0)
是的,前提是兄弟姐妹的数据成员或方法的访问权限是公开的。
兄弟姐妹无法访问其他兄弟的私有或受保护数据方法和数据成员。
您可以在Parent类中创建虚方法。然后,一个兄弟可以通过父(通过函数)获取数据;但是,据我所知,当你直接与兄弟姐妹交谈而不是通过父母时,生活会更好。 : - )