Forward declaration: class std::string;



  • Hallo,

    ich habe eine Header-Datei, in der einer Funktion std::string übergeben werden sollen:

    #ifndef MYCLASS_H
    #define MYCLASS_H
    
    class std::string;
    
    class myClass
    {
    private:
    	// ...
    
    public:
    	// ...
    	void func(std::string);
    };
    #endif
    

    Aber so geht das scheinbar nicht. Sowie ich das kompiliere, erhalte ich

    error: `std' does not have a class or union named `string'
    error: `string' undeclared in namespace `std'

    Kann man das überhaupt machen oder muss ich die string-header inkludieren?

    Gruss, Karl



  • du kannst auch selber den std-namespace anlegen 😉

    namespace std
    {
      class string;
    }
    

    Aber das könnte Probleme geben, da (1) deine Klasse (bzw. die Methode func()) vollständige Typ-Informationen benötigt, und (2) string ein typedef für "basic_string<char,...>" ist. Da dürfte es wohl einfacher sein, den string-Header einzubinden.



  • Ganz schlicht: Geht nicht (standardkonform).

    Nach den im Standard vorgeschriebenen Templateparametern darf die Implentation eigene Parameter hinzufügen (die dann einen Defaultwert haben müssen). Das macht es unmöglich, eine korrekte Forwarddeklaration hinzuschreiben.

    Die einzige Möglichkeit für Forwarddeklarationen in der Standardlibrary sind die IOStreams (mit include <iosfwd>).



  • perfekt!
    vielen dank für die info

    Martin


Anmelden zum Antworten