我有以下C ++代码,但主要在诸如以下代码(在代码块之后)之类的地方出现一些错误,该代理只是我在单独文件中创建的一个类
vector<Agent> population;
for (vector<int>::iterator i = population.begin(); i != population.end(); ++i) {
population.push_back(new Agent(generateDna(targetString.size())));
}
我遇到以下错误
- 从“ __gnu_cxx :: __ normal_iterator >>”到“ __gnu_cxx :: __ normal_iterator >>”的用户定义的转换不存在
2.no运算符“!=”匹配这些操作数-操作数类型为:__gnu_cxx :: __ normal_iterator >>!= __gnu_cxx :: __ normal_iterator >>
3.no重载函数“ std :: vector <_Tp,_Alloc> :: push_back [with _Tp = Agent,_Alloc = std :: allocator]”的实例与参数列表匹配-参数类型为:(Agent * )-对象类型为:std :: vector>
我是c ++的新手,所以这些事情可能是不言而喻的,但我不知道它们的含义。
答案 0 :(得分:-2)
主要问题是您要遍历在循环中甚至通过定义为int而不是Agent的迭代器追加的集合。创建新矢量,并将生成的值推入该新矢量。
也请注意使用new关键字。您必须稍后取消该内存。
解决方案:
vector<Agent> population;
vector<Agent> newPopulation;
for (vector<Agent>::iterator i = population.begin(); i != population.end(); ++i) {
newPopulation.push_back(Agent(generateDna(targetString.size())));
}
答案 1 :(得分:-2)
您当前的编译问题是您正在尝试将std::vector<Agent>::iterator
存储到std::vector<int>::iterator
中。这是两种完全不同的类型。
然后就是您的运行时问题(在您实际上向容器中添加元素之后,因为现在您没有元素),迭代器在push_back
之后可能会失效,并且您将拥有UB,因为您正在修改容器在循环播放时。
然后就是一个问题,您试图将Agent*
存储到Agent
的向量中。
总共:
std::vector<Agent> population;
//fill your vector.. otherwise loop is useless because size is 0..
auto size = population.size();
for (unsigned int i = 0; i < size; ++i) {
population.push_back(Agent(generateDna(targetString.size())));
}