C++迭代器,接口和指针

Ale*_*eau 2 c++ iterator interface vector

我正在尝试使用带接口的c ++迭代器,但无法使其工作.

我有点迷失了为矢量内容选择的类型.这需要指针吗?我必须制作一个"新的实施()"吗?简而言之,我不清楚,我无法找到有用的例子.

以下是接口和实现(.h文件).

class Interface{
public:
virtual int method() = 0;
};

class Implementation1 : public Interface{
    public:
    int method(); 
};

class Implementation2 : public Interface{
    public:
    int method();
};
Run Code Online (Sandbox Code Playgroud)

.cpp文件:

#include "content.h"

int Implementation1::method(){
    return 1;
}

int Implementation2::method(){
    return 2;
}
Run Code Online (Sandbox Code Playgroud)

而我的主要功能:

#include "content.h"
#include <vector>
#include <iostream>

using namespace std;

int main(void)
{
    // create the vector and put elements in it
    vector<Interface*> elements;
    elements.push_back(new Implementation1());
    elements.push_back(new Implementation1());
    elements.push_back(new Implementation2());

    // now iterate on them

    vector<Interface*>::iterator iterator;
    for(iterator = elements.begin(); iterator != elements.end(); ++iterator ){
        *iterator->method();
    }

    return 1;
}
Run Code Online (Sandbox Code Playgroud)

编译器正在输出:

main.cpp:在函数'int main()'中:main.cpp:19:错误:'*iterator .__ gnu_cxx :: __ normal_iterator <_Iterator,_Container> :: operator->中的成员'method'请求_Iterator = Interface**,_Container = std :: vector>',它是非类型的'Interface*'

关于我在这里做错了什么的任何想法?

Edw*_*nge 11

更改*iterator->method();(*iterator)->method();

前者取消引用迭代器 - > method()的返回值.Interface*没有方法(),它没有任何东西.

您希望取消引用迭代器以获取指针,然后取消引用IT.

你基本上和迭代器**一样,所以采取相应的行动.

  • 详细说明:` - >`优先于`*`,与`2*2 + 2`中的`*`相同,优先于`+`. (3认同)