首页 > 解决方案 > 具有类向量的类

问题描述

对不起,首先英语不好。我尝试搜索 +- 类似的麻烦,但找不到。

我尝试减少示例以获得更好的可读性。感谢帮助。

麻烦:我有 3 个带有类向量的类(“房间”、“盒子”、“球”)。“房间”类有“盒子”的向量。“盒子”有“球”的向量。

在我尝试从球矢量 (room->box(0)->ball(0)) 获取一些数据后,我收到错误“表达式:矢量下标超出范围”,但我使用方法“addBall”添加元素。

代码:

#include <vector>
#include <iostream>
#include <string>


class Ball
{
public:
    Ball() { name = "ball"; }
    std::string getName() { return name; }
    Ball getThis() { return *this; }

private:
    std::string name;
};

class Box
{
public:
    Box() { name = "Box"; ballList.resize(0); }
    std::string getName() { return name; }
    void addBall() { ballList.push_back(Ball()); }
    Box getThis() { return *this; }
    Ball getBall(int var) { return ballList[var]; }
private:
    std::vector <Ball> ballList;
    std::string name;
};

class Room
{
public:
    Room() { name = "Room"; boxList.resize(0); }
    std::string getName() { return name; }
    void addBox() { boxList.push_back(Box()); }
    Box getBox(int var) { return boxList[var]; }


private:
    std::vector <Box> boxList;
    std::string name;
};

int main()
{
    Room room;

    room.addBox();
    room.getBox(0).addBall();
    std::cout << room.getBox(0).getBall(0).getName();

    return 0;
}

感谢帮助!

标签: c++vector

解决方案


改变这个

Box getBox(int var) { return boxList[var]; }

对此

Box& getBox(int var) { return boxList[var]; }

您的版本不会返回房间中的盒子,而是返回房间中盒子的副本。因此,您不会将球添加到房间中的盒子中,而只是添加到房间中盒子的副本中。原来的盒子没变。

我的版本返回对原始框的引用,因此当您添加一个球时,您将添加到正确的框。

你也应该改变这个

Ball getBall(int var) { return ballList[var]; }

对此

Ball& getBall(int var) { return ballList[var]; }

出于同样的原因。

您还应该删除这些

Ball getThis() { return *this; }
Box getThis() { return *this; }

因为它们没有有用的目的。


推荐阅读