“错误:没有运算符”=“匹配这些操作数”

时间:2013-04-16 21:00:46

标签: c++ vector operator-keyword operand

我遇到这个奇怪的问题,编译器突出显示“=”和“!=”,因为错误声称没有匹配的操作数,但我不知道如何。这是我的代码:

#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 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

flotsamstd::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