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

}
4

4 回答 4

6

你的向量有不同的类型,迭代器应该是

vector<Element*>::iterator ptr;
//            ^
于 2013-04-16T21:02:42.100 回答
3

flotsam是一个std::vector<Element*>,所以你需要

vector<Element*>::iterator ptr;

通过迭代器访问指针时,您还需要取消引用指针:

(*ptr)->printAt();

或者,您可以通过使用Element对象向量来大大简化代码:

vector<Element> flotsam;
于 2013-04-16T21:03:00.840 回答
2

也许更好的解决方案是(C++11):

auto ptr = flotsam.begin();

它将对矢量元素类型保持稳定。

是的,看看迭代器的使用你可能应该有:

vector<Element> flotsam;
于 2013-04-16T21:07:10.227 回答
1

由于迭代器类型迭代 a vector<Element>flotsam因此也应该是 a vector<Element>。这里显然不需要指针容器。对象容器似乎合适。要添加元素,只需使用pushback(Element(rnd, console)); 不需要new

于 2013-04-16T21:07:43.830 回答