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 を反復処理するため、 も avector<Element>flotsamある必要がありますvector<Element>。ここでは、ポインターのコンテナーは明らかに必要ありません。オブジェクトのコンテナーが適切と思われます。要素を追加するには、単にpushback(Element(rnd, console));を使用します。必要ありませんnew

于 2013-04-16T21:07:43.830 に答える