static variable nicht statisch?



  • SDK_Base.h

    #ifndef _SDK_BASE
    #define _SDK_BASE
    
    namespace SDK
    {
    #include "CConfig.h"
    #include "CServer.h"
    }
    #endif
    

    CServer.h

    #ifndef _H_SERVER
    #define _H_SERVER
    
    class Server
    {
    public:
    	void static __fastcall Init();
    };
    
    #endif
    

    CServer.cpp

    #include "stdafx.h"
    #include "SDK_Base.h"
    
    using namespace SDK;
    
    void Server::Init() {
    Console::Write("Listen_Port %p\n", &Config::Server::Listen_Port);
    }
    

    CConfig.h

    #ifndef _H_CCONFIG
    #define _H_CCONFIG
    
    namespace Config {
    	void __fastcall Init();
    
    	namespace Server {
    		static int Listen_Port;
    	}
    }
    
    #endif
    

    CConfig.cpp

    #include "stdafx.h"
    #include "SDK_Base.h"
    
    using namespace SDK;
    
    void __fastcall Config::Init()
    {
    Console::Write("Listen_Port %p\n", &Config::Server::Listen_Port);
    }
    

    So, dass Problem ist das bei CConfig die Variable Listen_Port eine andere Adresse hat als die bei CServer. Die Variable ist als static deklariert, müsste folglich immer die gleiche Adresse haben?
    Wenn ich das static weglassen will, kommt der Linker Fehler 2005 (LNK2005) dass die Variable schon in *.obj definiert worden ist.



  • Wie lautet die Frage?



  • Indirekt^^
    Wie kann ich das Problem lösen, dass bei CConfig und CServer die gleiche Variable benutzt wird, sodass ich sie in CConfig ändern kann und sie in CServer übernommen wird. (Config::Server::Listen_Port)



  • Wie ist es mit

    CConfig.h

    #ifndef _H_CCONFIG
    #define _H_CCONFIG
    
    namespace Config {
    	void __fastcall Init();
    
    	namespace Server {
    		extern int Listen_Port;//nur anmelden, daß 
    //sie in einer (anderen) Übersezungeeinheit liegt. 
    	}
    }
    
    #endif
    

    CConfig.cpp

    #include "stdafx.h"
    #include "SDK_Base.h"
    
    using namespace SDK;
    
    int Config::Server::Listen_Port;
    
    void __fastcall Config::Init()
    {
    Console::Write("Listen_Port %p\n", &Config::Server::Listen_Port);
    }
    

    ?



  • Danke für die schnelle Antwort und die Erklärung für "extern".
    Es funktioniert 🙂


Anmelden zum Antworten