Fehler: Fehlendes ';' vor Bezeichner



  • wie gesagt das problem is, dass CLibrary CProjectBase einbinden muss und CProjectBase CLibrary einbinden muss

    steckt da auch ein sinn dahinter?



  • Das ist nur ein Testprojekt zur Verdeutlichung des Problems. Bei meiner eigendlichen Anwendung will ich aber dasselbe tun.
    Allgemein gesagt: Ich will einfach von einer Methode meiner Basisklasse, auf eine Methode der Abgeleiteten zugreifen. Dazu brauche ich doch eine Instanz von CLibrary, oder nicht?
    Wenn ich das Objekt innerhalb meiner Basisklasse-Methode erstelle, funktioniert das auch.
    Problem nur: Wenn ich das Objekt innerhalb der Klassendeklaration erstelle, geit dat nich! 😞



  • CodeVerhunzer schrieb:

    Ich will einfach von einer Methode meiner Basisklasse, auf eine Methode der Abgeleiteten zugreifen.

    Schon mal was von virtual gehört?
    Übrigens, dein Nick passt irgendwie. 😃



  • Guten Morgen,

    virtual hab ich natürlich auch schon eingesetzt, hier aber weggelassen.
    Das Problem ist ja nicht der Aufruf der Methode an sich, sondern die Erstellung der CLibrary-Instanz in CProjectBase.h

    PS: meinen Nickname trage ich mit Stolz! Postet mir euren Code! Ich zerstör ihn euch !! 😃 😃



  • hallo

    in der basisklasse brauchst du kein include
    #include "Library.h" // Hinzugefügt von der Klassenansicht

    sondern eine vowärtsdeklaration!

    class CLibrary;
    
    class CProjectBase  
    {
    public:
        CLibrary libObj;
    
        CProjectBase();
        virtual ~CProjectBase();
    };
    

    zum anderen, verwende bitte den neuen iostream header aus dem namespace std.

    #include <iostream> 
    using namespace std;
    

    zum dritten, verwende nicht so oft den klassenassistenten, .. oder verwende ihn richtig. zum bleistift hast du einmal einen includewächter, einmal nicht.

    mach einfach die includewächter erstmal selber.

    so long

    ps: die C's vor den klassen sind ein wenig extrem visual studio.. geschmackssache 😉



  • Danke für die Tips!
    Ich habe jetzt CLibrary "vorwärtsdeklariert". Nur kommt jetzt der Fehler, dass die von libObj benutzte Klasse CLibrary undefiniert sei, was doch eigendlich nicht der Fall ist. Was hab ich nu verbockt?



  • tja, ab diesem punkt mache dir nochmal gedanken über dein design.

    zum einen: arbeite mit zeigern, nicht mit instanzen, zum anderen: überlege dir nochmal, was du eigentlich machen möchtest.

    ist mir nicht ersichtlich.



  • vorwärtsdeklarationen klappen doch nur bei pointern und referenzen oder?



  • ich will lediglich von einer CLibrary-Instanz aus eine CLibrary-Methode aufrufen. Die Instanz soll aber in der Basisklasse deklariert sein. Der Aufruf soll in main erfolgen.

    So geht's natürlich auch:

    int main()
    {
    
    CProjectBase* pLib = new CLibrary;
    
    pLib->AddToLib();
    
    	return 0;
    }
    

    aber es muss doch auch wie oben genannt funzen? Eben über ein Objekt, dekl. in der Basisklasse. Besser wäre natürlich über einen Zeiger. Ich weiss nur nicht wie!



  • nö würde mich wundern wenn das mit nem objekt geht

    schliesslich müsstest du unendlich viel spiecher allokieren um eine einzige instanz zu erstellen



  • gut, dann ist der Weg mit "new" der beste und einzige?



  • ne der beste weg is es garnich zu machen weil es unsinn zu sein scheint dass jede
    CLibrary eine CLibrary beinhaltet

    wie elise gesagt hat mach dir mal gedanken über das design



  • hallo

    der zeiger muss in die klasse... bzw. du machst keine instanz, sondern einen zeiger.

    na ja, versuche erstmal, klarer zu machen, was du möchtest, warum du möchtest, klarer: was dein programm können soll, welche objekte dein programm braucht, wie sie untereinander kommunizieren, was für klassen dementsprechend benötigt werden, wie sie zusammenhängen... etc..

    so kommst du nicht weiter.



  • Ok, ich versuchs mal. Das Programm um welches es bisher ging ist eigendlich nur nur ein Pseudoprogramm um mein Problem auf der Konsole zu verdeutlichen. Das Prog woran ich arbeite ist eine MFC MDI-Anwendung (dessen Beschreibung eigendlich nicht hier hin gehört, ich weiss). Ich erkläre trotzdem mal weiter.

    Mein allgemeines Problem ist, dass meine Ansichtsklasse CMyView (abgel. von Basisklasse CView), einfach zu viele Funktionen hat und ich beim Öffnen der Klasse im Projektexplorer von den Funkts erschlagen werde. Durchblick unmöglich.
    Zugriffsmethoden, OnLButtonClick, GetDocument...kotz, kotz, kotz!

    Bevor ich hier die Krise kriege, hatte ich vor, die Funktionen auszulagern in andere Klassen.
    In meinem Fall:
    1. von CMyView eine Klasse CLibrary ableiten, die weitere Zeichenfunktionen enthält.
    2. Dann von OnLButtonDown (befindet sich in CMyView) eine Funktion von CLibrary aufrufen, z.B. OnDraw(CDC* pDC)

    Ich habe mal einige Funktionen in eine dll augelagert, aber es geht doch auch anders, oder?


Anmelden zum Antworten