#ifndef ELS_LISTENERS_H #ifndef ELS_NETWORK_H #define ELS_NETWORK_H #include #include #include "basics.h" using std::list; using std::string; namespace elserver { class networklistener { public: virtual void process_message(unsigned char message_type, string* message); }; class client { }; class network { public: static network* get_network(); void send_to_all_clients(string* msg); void add_listener(networklistener listen); void start_listen(); //Note that this should be executed in a seperate thread. private: network(); network(network& two); ~network(); list netlisten; list clients; static network *net; }; } #endif #define ELS_LISTENERS_H #include #include #include "network.h" using namespace std; typedef void(*netcallback)(string*); namespace elserver { class defaultnetlistener : networklistener { public: defaultnetlistener(); defaultnetlistener(const defaultnetlistener& n); void process_message(unsigned char message_type, string *message); private: map execute; }; } #endif #include #include "listeners.h" #include "client_serv.h" using namespace std; void handle_text(string* text) { } namespace elserver { defaultnetlistener::defaultnetlistener() { this->execute[RAW_TEXT] = &handle_text; } defaultnetlistener::defaultnetlistener(defaultnetlistener &n) { this->execute = n.execute; } void defaultnetlistener::process_message(unsigned char message_type, std::string *message) { this->execute[message_type](message); } } #include "init.h" #include "listeners.h" namespace elserver { void init_networks() { network *n = network::get_network(); defaultnetlistener nlisten; n->add_listener(nlisten); //THIS HAS THE ERROR } }