Klassen, Includes und Verwicklungen...



  • Hi,

    also ich habe hier ein paar Probleme mit Klassen und Inkludierungen, wo man wohl Forward-Deklarationen einsetzen muss, weil gegenseitige Abhängigkeiten bestehen, ich poste einfach mal ein paar Dateiköpfe:

    // Serveruser.hpp
    
    #ifndef SERVERUSER_
    #define SERVERUSER_
    
    #include <vector>
    #include "Plugin.hpp"
    #include "SocketClnt.hpp"
    #include "FindPlugin.hpp"
    #include "Kernel.hpp"
    
    namespace Core
    {
    	using namespace std;
    	using namespace Internet;
    
    	class Serveruser
    [...]
    

    Wie man sieht inkludiert diese Datei diverses, besonders wichtig ist hier Kernel.hpp:

    // Kernel.hpp
    #ifndef KERNEL_
    #define KERNEL_
    
    class Serveruser;
    
    #include "Serveruser.hpp"
    
    namespace Core
    {
    
    	class Kernel
    	{
    	private:
    		Serveruser* serveruser_;	
    [...]
    

    Kernel.hpp nutzt, wie man hier sieht, ebenfalls Serveruser.hpp, daher die Forward-Deklaration.
    Leider gibt es damit anscheinend Probleme in der Application.hpp:

    #ifndef APPLICATION_
    #define APPLICATION_
    
    #include <string>
    #include "Serveruser.hpp"
    
    namespace Main
    {
    	using namespace std;
    	using namespace Core;
    
    	class Application
    	{
    	private:
    		static const int MAX_CONNECTION_TRYS;
    
    		Serveruser* pServeruser_;
    [...]
    

    In der Zeile mit Serveruser* meldet er mir:

    MS Visual C++6.0 schrieb:

    h:\gemeinsames\projekte\inetpluginx\application.hpp(18) : error C2872: 'Serveruser' : Mehrdeutiges Symbol

    Tja, ich bin nun ratlos, hat einer eine Idee? 🙂

    MfG Eisflamme



  • möglicherweise

    namespace Core 
    { 
        class Serveruser 
    }
    
    // Kernel.hpp 
    class Serveruser;
    

    leg die vorwärtsdeklaration mal ausserhalb des Core namespaces ab



  • Ersetze in Kernel.hpp

    class Serveruser;

    durch

    namespace core
    {
    class Serveruser;
    }

    Sonst hast Du zwei: einmal das in core und einmal das im globalen NS, welches zwar deklariert aber nicht definiert ist und zu einem Linker-Fehler führen wird.



  • Du hast doch in Kernel.hpp Serveruser.hpp inkludiert und auch noch eine Forwarddeklaration auf diese Klasse. Wenn du in beiden Headern (Kernel und Application) nur Pointer brauchst, reicht doch hier auch in beiden Fällen eine Forwarddeklaration.



  • Hallo,

    stimmt, Kernel verwendet Serveruser in der Klassendefinition nur als Zeiger, dann kann ich mir das Inkludieren sparen. 🙂
    Ansonsten hätte es das Problem gegebene, dass die Inkludierung im namespace erfolgt wäre und das hat zu diversen Fehlern mehr geführt.
    Aber so klappt es, danke

    MfG Eisflamme


Anmelden zum Antworten