Zugriff von Hauptklasse zu Abgeleiteter Klase
-
Ich habe eine Hauptklasse und eine Abgeleitete Klasse.
Jetzt will ich eine Methode der Abgeleiteten Klasse in der Hauptklasse aufrufen.
Geht nicht

in private der Hauptklasse steht:
virtual void MyFunction();in der Methode Manage der Hauptklasse steht:
Hauptklasse* HauptObj = new Abgeleiteteklasse; HauptObj -> Do_sth.(); delete HauptObj;Kann mir einer Helfen?
-
Newc schrieb:
Geht nicht

Gewöhn dir gleich zwei Dinge an: Erstens, zu sagen, was nicht geht (z.B. Fehlermeldung posten) und zweitens nicht so viele Smileys zu verwenden, das stärkt die Seriosität nämlich nicht gerade.
Ausserdem kann ich gerade keinen Zusammenhang zwischen deinen beiden Codeteilen entdecken...
-
Mal ins blaue raus:
Du musst in der abgeleitenden Klasse eine Definition der Klasse haben.Zeig bitte mal konkreten Code. Ich habe meine Glaskugel fallen gelassen und die nächste kommt erst Weihnachten..
-
Die main() :
#include <CManager.h> int main() { CManager CVM; CVM.manager(); }CManager.h (Die Hauptklasse) :
#ifndef _CM_ #define _CM_ #include <iostream> #include <cstdlib> #include <stdlib.h> #include <windows.h> #include <cmath> using namespace std; class Cberechnen; class CSpiel; class Ceinmaleins; class CManager { public: void manager() { manage(); } CManager(); ~CManager(); private: CManager* ManObj[2]; int f,g,ausw; void manage(); void intro(); void menu(); void aufrufen(); virtual void berechnen() {} virtual void eins() {} virtual void einser() {} }; #endifWichtiger Ausschnitt der Auslagerungsdatei:
#include <ManagerH.h> CManager::CManager() { g = 0; ausw = 0; ManObj[0] = new Cberechnen(); ManObj[1] = new Ceinmaleins(); ManObj[2] = new CSpiel(); } void CManager::manage() { intro(); menu(); aufrufen(); } void CManager::aufrufen() { switch(ausw) { case 1: { ManObj[0] -> berechnen(); break; } case 2: { ManObj[1] -> eins(); break; } case 3: { ManObj[2] -> einser(); break; } case 4: { g ++; break; } default: { cout<<"Error.. Wiederholung.\n"; Sleep(200); break; } } } CManager::~CManager() { delete ManObj[0]; delete ManObj[1]; delete ManObj[2]; }Und der Error:
No appropriate constructor found
-
Ich sehe da weder einen Zusammenhang zu dem ersten Post, noch wo du hier ableitest..
Und bitte komplette Fehlermeldungen, inklusive Zeilen Nummer posten..
-
Ich hab mit dem ManObj ->berechnen() aufgerufen. Oder es versucht.
Ich wollte im allgemeinen eine Klasse, die nach fragt was man machen will und in abgeleiteten Klassen Funktionen aufruft.
Abgeleitet sind die anderen 3 Klassen, die ich hier nicht gezeigt habe.
So sollte es gehen(Habs so nachgelesen)Die errors:
Include/source.... 7 error C2512 : ’Cberechnen’ : no appropriate default constructor avaible
Und 2 weitere mit den anderen Klassen anstatt ’Cberechnen’
-
Und wo ist den bitteschön Cberechnen definiert?
Du includest ja in der cpp nur ManagerH.h und da wissen wir auch nicht, wie die aussieht.
Ich befürchte, dass du dich in etwas reinstürtzt, wo du nicht wirklich einen Überblick hast. Geh lieber noch einmal ein paar Seiten zurück und schalt einen Gang tiefer, so dass du alles verstehst.
Mach einmal eine ganz einfache Klasse. Dann lässt du das ganze mal ganz normal erben und vergewisserst dich, dass du alles verstehst, was passiert. Und dann kannst du mal mit virtuellen Funktionen probieren zu arbeiten. Aber fang nicht gleich hinten an. Das kommt nicht gut.