У меня странная проблема, когда компилятор выделяет «=» и «! =» Как ошибки, утверждая, что нет соответствующих операндов, но я понятия не имею, как. Вот мой код:
#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();
}
Ваш вектор имеет другой тип, итератор должен быть
vector<Element*>::iterator ptr;
// ^
flotsam
является std::vector<Element*>
так что тебе нужно
vector<Element*>::iterator ptr;
Вам также нужно будет отменить ссылку на указатель при обращении к нему через итератор:
(*ptr)->printAt();
Кроме того, вы можете значительно упростить свой код, используя вектор Element
объекты:
vector<Element> flotsam;
Может быть, даже лучшее решение будет (C ++ 11):
auto ptr = flotsam.begin();
Он будет устойчив к типу векторных элементов.
И да, глядя на использование итератора, вы, вероятно, должны иметь:
vector<Element> flotsam;
Поскольку тип итератора перебирает vector<Element>
, flotsam
также должен быть vector<Element>
, Там нет очевидной необходимости в контейнере указателей здесь; контейнер объектов кажется подходящим. Чтобы добавить элементы, просто используйте pushback(Element(rnd, console))
; нет new
необходимо.