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.
你基本上和迭代器**一样,所以采取相应的行动.
归档时间: |
|
查看次数: |
2414 次 |
最近记录: |