我遇到这个奇怪的问题,编译器突出显示“=”和“!=”,因为错误声称没有匹配的操作数,但我不知道如何。这是我的代码:
#pragma once
#include "Console.h"
#include "RandomNumber.h"
#include "Element.h"
#include "Flotsam.h"
#include "vector"
#include <list>
#include <iostream>
using namespace std;
#define NUMBER 10
int main()
{
Console console;
RandomNumber rnd;
vector<Element*> flotsam;
for(int i = 0; i < NUMBER; i++)
{
flotsam.push_back(new Element(rnd, console));
}
vector<Element>::iterator ptr;
ptr = flotsam.begin();
while(ptr!=flotsam.end())
{
ptr->printAt();
ptr++;
}
Sleep(1000);
console.clear();
}
答案 0 :(得分:6)
你的矢量有不同的类型,迭代器应该是
vector<Element*>::iterator ptr;
// ^
答案 1 :(得分:3)
flotsam
是std::vector<Element*>
,因此您需要
vector<Element*>::iterator ptr;
当通过迭代器访问指针时,您还需要取消引用指针:
(*ptr)->printAt();
或者,您可以使用Element
个对象的向量来大大简化代码:
vector<Element> flotsam;
答案 2 :(得分:2)
也许更好的解决方案是(C ++ 11):
auto ptr = flotsam.begin();
它对矢量元素类型是稳定的。
是的,看一下你可能应该使用的迭代器:
vector<Element> flotsam;
答案 3 :(得分:1)
由于迭代器类型迭代vector<Element>
,flotsam
也应该是vector<Element>
。这里没有明显需要一个指针容器;一个容器的对象似乎是合适的。要添加元素,只需使用pushback(Element(rnd, console))
;不需要new
。