我有一个类Weapon的向量,然后循环并将id值添加到向量。
Weapon* weapon;
vector<Weapon*> weaponVector;
for (int i = 0; i < 10; i++)
{
weapon = new Weapon(i);
weaponVector.push_back(weapon);
}
然后我有一个向量迭代器来尝试在向量中找到指定的数字。
vector<Weapon*>::iterator findIt;
findIt = find(weaponVector.begin(), weaponVector.end(), 5);
在Weapon类中,我创建了一个运算符重载来检查id是否相同。
bool Weapon::operator==(const Weapon& rhs)
{
return (rhs.id == id);
}
Quesion:
我试图在weaponVector中找到数字5,但是我一直收到这个错误:
C2446 '==': no conversion from 'const int' to 'Weapon *
我尝试过的事情:
findIt = find(weaponVector.begin(), weaponVector.end(), Weapon(5));
Weapon five = Weapon(5);
findIt = find(weaponVector.begin(), weaponVector.end(), five);
无论我尝试什么,我都会遇到错误。非常感谢任何帮助。
答案 0 :(得分:2)
如果使用C ++ 11,只需使用带有lambda函数的std::find_if
:
#include <algorithm>
//...
int number_to_find = 5;
auto findIt = std::find_if(weaponVector.begin(), weaponVector.end(),
[&](Weapon* ptr) { return ptr->id == number_to_find;});
答案 1 :(得分:1)
尝试使用std::find_if
功能。然后,您可以传递一个可以在Weapon
和ID号之间进行比较的函数。请参阅http://en.cppreference.com/w/cpp/algorithm/find。
答案 2 :(得分:0)
当你的搜索正在搜索整数5(a Weapon*
)时,你的Vector会持有指向武器(const int
)的指针。比较两者都没有意义,因为你不想知道是否有任何武器对象存储在内存地址“5”。
将Weapon*
与实际Weapon
进行比较也没有多大意义,因为对象及其内存地址不同。
因此,您使用std::find_if
或使用std::vector<Weapon>
并直接存储武器对象。
答案 3 :(得分:0)
您可能希望在向量中使用武器副本而不是指针:
std::vector<Weapon> weaponVector;
for (int i = 0; i < 10; i++)
{
Weapon w = Weapon(i); // Create a temporary weapon.
weaponVector.push_back(weapon); // Copy the temporary and place into the vector.
}
通过使用副本,您可以消除动态内存管理的麻烦,并且还必须取消引用指针。
您的搜索循环:
vector<Weapon>::iterator findIt;
Weapon w5 = Weapon(5);
findIt = find(weaponVector.begin(), weaponVector.end(), w5);
请注意,我创建了一个临时文件,因为您没有在班级中定义operator==(unsigned int)
(或者您没有显示它)。 find
函数希望搜索值与向量中的对象具有相同的类型。