Vector迭代器不兼容错误
vector iterators incompatible error
我在运行时得到向量迭代器不兼容的错误。发生这种情况的那一行位于代码段的最后,在for循环(human。push_back(Human(&deck, (*iter)));)当我第一次得到错误时,我错误地使用了不同的迭代器而不是'iter',所以运行时错误完全有意义。但是现在我改变了它并重新编译了所有内容(我仔细检查了一下),我仍然得到这个错误。
void BlackjackGame::getHumansAndHouse()
{
// asks how many players, pushes_back vector accordingly, initializes house, checking for valid input throughout
string input;
vector<string> names;
while(true)
{
cout << "How many humans? (1 - 7)" << endl;
cin >> input;
if(!isdigit(input[0]))
cout << "Invalid input. ";
else
{
input.erase(1);
int j = atoi(input.c_str());
for(int i = 1; i <= j; i++)
{
while(true)
{
cout << "Enter player " << i << " name: ";
cin >> input;
if(strcmp(input.c_str(), "House") == 0)
cout << "Player name has to be different than 'House'." << endl;
else
{
names.push_back(input);
break;
}
}
}
break;
}
}
vector<string>::iterator iter;
for(iter = names.begin(); iter != names.end(); iter++)
humans.push_back( Human(&deck, (*iter)) );
house = House(&deck);
}
人类是一个载体:
vector<Human> humans;
其中Human是一个类,其构造函数如下:
Human(Deck *d, string n) : Player(d), name(n) { printNameCardsAndTotal(); }
(Human是Player的派生类)
因为iter是指向string类型的vector的迭代器,所以我不明白为什么在for循环的那一行中会出现vector迭代器不兼容的情况。我又不是想把iter直接用在人类身上。
error is here
humans.push_back( Human(&deck, (*iter)) );
错误在您没有显示的代码中。下面的代码,我是根据你的代码和你的描述编写的,没有产生任何错误:
#include <vector>
#include <string>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cctype>
using namespace std;
class Deck
{
};
class Player()
{
public:
Player(Deck *d) {}
};
class Human : public Player
{
public:
Human(Deck *d, string n) : Player(d), name(n) {}
private:
string name;
};
class House
{
public:
House(Deck *d) {}
};
int main()
{
Deck deck;
vector<Human> humans;
string input;
vector<string> names;
while(true)
{
cout << "How many humans? (1 - 7)" << endl;
cin >> input;
if(!isdigit(input[0]))
cout << "Invalid input. ";
else
{
input.erase(1);
int j = atoi(input.c_str());
for(int i = 1; i <= j; i++)
{
while(true)
{
cout << "Enter player " << i << " name: ";
cin >> input;
if(strcmp(input.c_str(), "House") == 0)
cout << "Player name has to be different than 'House'." << endl;
else
{
names.push_back(input);
break;
}
}
}
break;
}
}
vector<string>::iterator iter;
for(iter = names.begin(); iter != names.end(); iter++)
humans.push_back( Human(&deck, (*iter)) );
House house = House(&deck);
return 0;
}
不如试试
iter != names.end()
在for循环中始终使用预增量迭代器,并使用it != end
作为c++中的哨兵(这也适用于int
s)。
for(iter = names.begin(); iter **!=** names.end(); **++iter**)
微软<vector>
头实现在你的构建中启用了一些调试检查,使迭代器比指针更丰富——它们跟踪它们正在迭代的容器、它们的"邻居"迭代器以及它们指向的对象。你遇到的断言是检查两个迭代器应该指向同一个容器,但它发现它们没有(根据迭代器的状态)。
所以你要么在某处破坏了迭代器对象/列表,要么你做了一些代码片段中没有显示的事情。
相关文章:
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 类型为 "int*" 的参数与 C++ 中错误类型"int**"参数不兼容
- 该对象具有与成员函数不兼容的类型限定符.为什么会出现此错误?
- 编译器错误"在if语句中分配不兼容的类型"
- 发生 Qt5.11 应用插件构建错误:信号和插槽参数不兼容
- 向量迭代器不兼容的错误,用于保存另一个向量的迭代器的向量
- C++,弹出调试断言失败窗口,我得到矢量迭代器不兼容的错误运行时
- 错误:将"long int (*)[4]"分配给"long int [4][4]"时的类型不兼容
- 创建进程使用路径时出现错误事件:类型 "char *" 的 E0167 参数与类型 "LPWSTR" 的参数不兼容
- pybind11基本回调,不兼容的功能签名错误
- 迭代器不兼容错误
- 不断增加的指针数组 错误:赋值中的类型不兼容
- C++头文件出现Windows不兼容错误
- 在beaglebone black上使用arm-linux-gnueabihf时跳过不兼容错误
- 字符串迭代器不兼容错误,当我将字符串转换为矢量<byte>时
- 错误:在 GEANY 中将"int"赋值为"char [1]"时类型不兼容
- 复制构造函数错误:对象的类型限定符与成员函数不兼容
- C++中的C代码不兼容参数错误
- 我有 3 个错误:期望一个")",期望一个表达式,long 类型的参数与 U32 类型的参数不兼容
- 如何消除"矢量迭代器不兼容"错误?