C ++继承麻烦

时间:2013-12-27 15:23:43

标签: c++ inheritance

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

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

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

然后我在Car标题中有这个: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;&lt; Car文件本身过载。

最后,我在Entity.h文件中遇到的最后一个错误是'class'类型的redifinition。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

在过载运算符的类Car中&lt;&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)

答案 1 :(得分:1)

include guards添加到您的标头文件或放入

#pragma once 

在标题的开头

  

Entity.h文件是'class'类型redtifinition。

表示编译器带有文本

class Entity { [...] };
不止一次。

您可以将include语句视为复制粘贴。你写的所有东西

file.h

将被复制粘贴到具有语句

的任何文件中
#include "file.h"

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

如果您的源文件现在有

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

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