我在头文件和源文件之间分配了以下代码。在函数插入中,它表示AllBridges向量未初始化(它甚至似乎无法识别它?)并且nextBridge没有赋值 - 除了我以为我在构造函数中做了?
#include <vector>
using namespace std;
class Bridge
{
public:
Bridge(int);
void insert(Bridge);
private:
int nextBridge;
vector<Bridge> AllBridges;
};
#include "StdAfx.h"
#include "Bridge.h"
using namespace std;
Bridge::Bridge(int size){
AllBridges.reserve(size);
nextBridge= 0;
}
void insert(Bridge AddBridge){
AllBridges[nextBridge] = AddBridge;
}
答案 0 :(得分:6)
应该是
void Bridge::insert(Bridge AddBridge)
而不是
void insert(Bridge AddBridge)
答案 1 :(得分:3)
您正在尝试复制已经属于vector
的功能。
您应该让vector
完成其工作,并跟踪您插入了多少bridge
,而不是自己跟踪nextBridge。您需要使用insert
添加到push_back
的末尾,而不是vector
在指定位置,因此您的代码将变为:
Bridge::Bridge(int size){
AllBridges.reserve(size);
}
void Bridge::insert(Bridge AddBridge){
AllBridges.push_back(AddBridge);
}
...您只需从nextBridge
的定义中删除Bridge
即可。
顺便说一句,我认为你犯了一个根本性的错误:你把一座桥的概念与所有桥梁的概念混为一谈。这是一个常见的错误(有时由绝对不是初学者的人制作),但它几乎不可避免地导致问题。例如,您插入Bridge
的{{1}}每个AllBridges
都有AllBridges
个(这可能是空的,但谁知道)。
你真的希望Bridge
只代表一个桥,然后(如果需要)有一个单独的类型来表示一个桥的集合 - 如果它确实添加了一些有用的东西{ {1}}。
编辑:我想我应该添加另一种可能性:也许你确实希望std::vector<Bridge>
类型能够跟踪所有实例化的实例。如果是这样,你想让你的Bridge
AllBridges
成员,所以你有一个类的实例,而不是该类的每个对象的单独实例。
答案 2 :(得分:2)
在reserve
上调用std::vector
可确保它有足够的容量来托管这么多元素(如果已添加)。它不会调整矢量大小,只会改变其容量。您要找的是resize
。
您的Bridge::
成员函数定义中也缺少insert
。