Prototyp einer klasse? Wie?



  • Hi,

    ich steh vor einem Problem... so sieht meine datei momentan aus:

    class exLog;
    
    inline void bla (void)
    {
        exLog   &Protokoll = exLog::getInstance ();
        // [...]
    }
    
    class exLog
    {
    public:
        static exLog    &getInstance    (void) { return (m_Instance); }
    
        void setFile    (const char *FileName = "Protokoll.txt");
        void writeText  (char *p_chFormat, ...);
        void writeText  (const char *p_chFormat);
    
    private:
        exLog           (void); 
    
        static  exLog   m_Instance;
    
        FILE            *m_LogFile;
        char            m_LogFileName[255];
    };
    

    ich bräuchte für die Funktion "bla" die klasse exLog, doch die funzt net, nun dachte ich mit

    class exLog;
    

    könnte man so ne art Prototyp der klasse erstellen, dem war aber net so. wie macht man sowas? 😕



  • oder kann man inline in 2 Dateien benutzen z.B. so:

    // *.h
    inline void bla(void);
    
    // *.cpp
    inline void bla(void)
    {
         // [...]
    }
    

    ?? 😕



  • Öhm, spricht was dagegen, die Funktion erst nach der Klasse zu definieren? Einfach 'class ExLog;' zu schreiben, ermöglicht dir nur, die Klasse als Ziel von Pointern und Referenzen sowie als Rückgabewert zu verwenden, aber nicht, auf Elemente der Klasse (wie getInstance) zuzugreifen. Dazu muß die Klasse vollständig bekannt sein.



  • Original erstellt von <Dread>:
    **oder kann man inline in 2 Dateien benutzen z.B. so:

    // *.h
    inline void bla(void);
    
    // *.cpp
    inline void bla(void)
    {
         // [...]
    }
    

    ?? 😕**

    ne du die funktion muss in allen modulen bekannt sein, d.h. du musst sie in header definieren



  • Das mit inline hab ich ausprobiert:

    in VC++.net funzt das aber? 😕



  • das inline kannst du sowieso weglassen.... Im Klassenbereich definierte Methoden sind sowieso inline, sodass das inline einfach überlesen wird. Du brauchst auch keinen Klassenprototyp wieso machst du das? Ruf die Funktion doch nach der Klasse auf ?!?!



  • das inline kannst du sowieso weglassen.... Im Klassenbereich definierte Methoden sind sowieso inline, sodass das inline einfach überlesen wird.

    Zwar ist es richtig, dass Methoden die innerhalb einer Klassendefinition definiert werden automatisch inline sind, die explizite Angabe von inline also unnötig ist, das einzige was im oberen Code aber als inline deklariert wurde ist eine *Funktion* und da ist das inline schon ganz richtig. Ohne explizites inline ist die Funktion nicht inline deklariert und das Einbinden des Headers in mehrere cpp-Datei würde eine Verletzung der ODR nach sich ziehen.



  • wenn ich deine frage richtig verstanden habe, dann gehts bei deinem problem gar nicht um inline, sondern darum, dass du eine forward declaration der klasse exLog machen willst, oder?

    machs doch einfach so:

    class exLog
    {
    public:
        static exLog    &getInstance    (void) { return (m_Instance); }
    
        void setFile    (const char *FileName = "Protokoll.txt");
        void writeText  (char *p_chFormat, ...);
        void writeText  (const char *p_chFormat);
    
    private:
        exLog           (void); 
    
        static  exLog   m_Instance;
    
        FILE            *m_LogFile;
        char            m_LogFileName[255];
    }; 
    
    inline void bla (void)
    {
        exLog   &Protokoll = exLog::getInstance ();
        // [...]
    }
    

Anmelden zum Antworten