c++ - 具有类向量的类
问题描述
对不起,首先英语不好。我尝试搜索 +- 类似的麻烦,但找不到。
我尝试减少示例以获得更好的可读性。感谢帮助。
麻烦:我有 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;
}
感谢帮助!
解决方案
改变这个
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; }
因为它们没有有用的目的。
推荐阅读
- loops - 在while循环Java中使用charAt
- aem - 在 AEM 6.3 中使用 TokenUtil 创建凭据
- python - Web Scraping 从 Blob 获取视频
- sql - 我怎样才能让这个查询工作?
- java - 测试在 Java 中使用另一个比较器的比较器的最佳方法是什么?
- python - 使用 Fabric 在 EC2 中运行命令
- html - 如何在输入文本占位符中添加 HTML 换行符
- css - Bootstrap 3 pull-right 类推出行
- php - 来自另一台服务器的 Document_root
- heroku - 无法将免费的 Ignite clearDB 添加到 Heroku 应用程序