& quot; Ошибка: Нет оператора & quot; = & quot; соответствует этим операндам & quot;

У меня странная проблема, когда компилятор выделяет «=» и «! =» Как ошибки, утверждая, что нет соответствующих операндов, но я понятия не имею, как. Вот мой код:

#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();

}

1

Решение

Ваш вектор имеет другой тип, итератор должен быть

vector<Element*>::iterator ptr;
//            ^
6

Другие решения

flotsam является std::vector<Element*>так что тебе нужно

vector<Element*>::iterator ptr;

Вам также нужно будет отменить ссылку на указатель при обращении к нему через итератор:

(*ptr)->printAt();

Кроме того, вы можете значительно упростить свой код, используя вектор Element объекты:

vector<Element> flotsam;
3

Может быть, даже лучшее решение будет (C ++ 11):

auto ptr = flotsam.begin();

Он будет устойчив к типу векторных элементов.

И да, глядя на использование итератора, вы, вероятно, должны иметь:

vector<Element> flotsam;
2

Поскольку тип итератора перебирает vector<Element>, flotsam также должен быть vector<Element>, Там нет очевидной необходимости в контейнере указателей здесь; контейнер объектов кажется подходящим. Чтобы добавить элементы, просто используйте pushback(Element(rnd, console)); нет new необходимо.

1
По вопросам рекламы [email protected]