【发布时间】:2015-01-24 19:24:57
【问题描述】:
我有一个抽象基类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 行是上述第 40-44 行:
private:
void Foo();
Ball* gameBall;
float bar;
起初我以为我忘了在文件paddle.h 中包含Ball 的定义。但这种情况并非如此。我正在做的事情是正确的还是目前被忽略的缺陷?
【问题讨论】:
-
您能创建一个Minimal, Complete, and Verifiable Example 并展示给我们看吗?
-
当然@JoachimPileborg 正在处理它 :)
-
编译器无法识别符号
Ball。您是否忘记#include .h 文件,其中Ball在paddle.h中定义? -
ball.h也是#define <paddle.h>吗?循环包含会导致问题,即使包含防护也是如此。也许您需要使用前向声明而不是包含。
标签: c++ class inheritance compiler-errors