C++继承问题

C++ inheritance trouble

本文关键字:问题 继承 C++      更新时间:2023-10-16

最近我一直在用C++制作游戏,在尝试使用继承时遇到了麻烦。

我想做的是创造汽车和一个玩家,这也是某种形式的汽车。这两件事都需要一个x和y位置,一个获取这些位置的方法和一个渲染。由于我希望代码具有良好的质量,所以我只想写一次代码。我在以下实体文件中做了部分工作:http://pastebin.com/nceanyQD

实体标题:http://pastebin.com/CLTv9B0Y

然后我在汽车标题中有这个:http://pastebin.com/T9v0WGKd

最后,在Car文件中:http://pastebin.com/CJ5wnby5

当我运行这段代码时,它会出现几个错误。首先在Player.h的实体行下面告诉我:实体基类未定义。

以下代码中的游戏文件中的另一个错误(渲染和更新所有内容):

Car Game::getCarAtLocation(int x, int y)
{
vector<Car>::iterator iter = cars.begin();
for(iter = cars.begin(); iter != cars.end(); ++iter)
{
if(iter->getX() == x)
{
if(iter->getY() == y)
{
return *iter;
}
}
}
return NULL;
}

它告诉我getY和getX不是Car的成员。然而,相同的getY和getX在运算符<lt;Car文件本身过载。

最后,我在Entity.h文件中得到的最后一个错误是"class"类型的重新定义。

我做错了什么?我该如何解决?

如果需要任何其他代码,可以在这里下载。https://dl.dropboxusercontent.com/u/59067404/BalCab.zip

第二个错误很简单-迭代器必须是"const",因为getY()和getX()有const修饰符。

vector<Car>::const_iterator iter = cars.begin();

类内轿厢超载操作员<lt;工作是因为汽车参数"const">

friend ostream& operator<<(ostream& os, const Car car);

以及为什么在Car.cpp中更改您所写的过载操作员的签名:

ostream& operator<<(ostream& os, Car car) ......

必须与申报相同

ostream& operator<<(ostream& os, const Car car)

将include guard添加到头文件或放入

#pragma once 

在标题的开头

Entity.h文件是"class"类型的重新定义。

意味着编译器将显示文本

class Entity { [...] };

不止一次。

您可以将include语句视为复制粘贴。你在中写的所有内容

file.h

将被复制粘贴到任何具有语句的文件中

#include "file.h"

当您调用编译器时(按下IDE中的build/make按钮)

如果你的源文件现在有

#include "Car.h"
#include "Entity.h"

编译器现在将拥有Entity定义的两个副本。