striker159
Lt. Junior Grade
- Registriert
- Dez. 2008
- Beiträge
- 327
hallo
ich habe eine abstrakte klasse A mit einer methode.
von dieser klasse werden 2 klassen (B und C) abgeleitet, und die methode jeweils unterschiedlich implementiert
nun möchte ich in einer klasse D einen vector<A*> verwenden, und dort instaznen von B und C speichern. dann möchte ich in einer funktion durch den vector iterieren, und jeweils die methode aus klasse A aufrufen ( die ja unterschiedlich in B und C definiert ist)
der methodenaufruf klappt allerdings nicht
a.h
b.cpp
d.cpp
die fehlermeldung lautet:
was muss ich dabei beachten, damit das so funktioniert?
ich habe eine abstrakte klasse A mit einer methode.
von dieser klasse werden 2 klassen (B und C) abgeleitet, und die methode jeweils unterschiedlich implementiert
nun möchte ich in einer klasse D einen vector<A*> verwenden, und dort instaznen von B und C speichern. dann möchte ich in einer funktion durch den vector iterieren, und jeweils die methode aus klasse A aufrufen ( die ja unterschiedlich in B und C definiert ist)
der methodenaufruf klappt allerdings nicht
a.h
Code:
#ifndef abc
#define abc
class A{
public:
virtual int get() const = 0;
};
#endif
b.cpp
Code:
#ifndef BC
#define BC
#include "a.h"
class B : public A{
public:
virtual int get() const;
};
int B::get() const{
return 1;
}
class C : public A{
public:
virtual int get() const;
};
int C::get() const{
return 2;
}
#endif
d.cpp
Code:
#ifndef qwe
#define qwe
#include "a.h"
#include "b.cpp"
#include <vector>
#include <iostream>
using namespace std;
class D {
public:
void add(A* a);
void muh() const;
private:
vector<A*> vec;
};
void D::add(A* a){
vector<A*>::iterator it;
for ( it=vec.begin() ; it < vec.end(); it++ )
vec.push_back(a);
}
void D::muh() const{
vector<A*>::const_iterator it;
for ( it = vec.begin() ; it < vec.end(); it++ )
cout<<it->get()<<endl;
}
int main(){
D d;
d.muh();
return 0;
}
#endif
die fehlermeldung lautet:
Code:
d.cpp: In member function 'void D::muh() const':
d.cpp:28:13: error: request for member 'get' in '* it.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator-> [with _Iterator = A* const*, _Container = std::vector<A*>, __g
nu_cxx::__normal_iterator<_Iterator, _Container>::pointer = A* const*]()', which is of non-class type 'A* const'
was muss ich dabei beachten, damit das so funktioniert?