C++ anfängerproblem abtrakte klasse

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
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?
 
Edit: Sry hab mich eben vertan. Antwort zurückgenommen.
Wie DaZpoon bereits sagte, ist ein Default Constructor immer enthalten. Dennoch hat in C++ auch eine abstrakte Klasse einen Konstruktor und jede erbende Klasse ruft diesen automatisch auf, wenn davon ein neues Objekt instanziert wird, nur zur Info.
Problem lag in deinem Fall dann wirklich nur daran, dass du den Pointer nicht dereferenziert hast.
 
Zuletzt bearbeitet:
danke Blitzmerker, so ein doofer fehler.
it ist ja der iterator und nicht das objekt^^

frage also beantwortet
 
hier stand mist :-D
 
Zurück
Oben