2013-04-16 5 views
1

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

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

} 
+2

'вектор ' против 'вектор ' – Joe

+0

я должен отметить, что только «=» и «! =» Операторы, которые подсвечены являются после «PTR» 'ы – user2288204

+0

Хорошо я удалил указатель из вектора , теперь "." дает ошибку на flotsam.pushback – user2288204

ответ

6

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

vector<Element*>::iterator ptr; 
//   ^
+0

Спасибо, добавил, что указатель. Но теперь эта часть программы: ptr-> printAt(); дает ошибку: должен иметь указатель на тип класса – user2288204

+0

@ user2288204 Сделать это '(* ptr) -> printAt()'. –

+0

Спасибо огромное, моя программа отлично работает! : D – user2288204

3

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

vector<Element*>::iterator ptr; 

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

(*ptr)->printAt(); 

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

vector<Element> flotsam; 
2

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

auto ptr = flotsam.begin(); 

Это будет стабильным против типа векторного элемента.

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

vector<Element> flotsam; 
1

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

+0

Спасибо, я сделаю изменения сейчас :) – user2288204