Código
struct host { public: u_char ip[4]; u_char mac[6]; }; class lista_usuarios { public: vector<host> usuarios; bool contiene_host(u_char* ip, u_char* mac); void insertar_host(u_char* ip, u_char* mac); }; void lista_usuarios::insertar_host(u_char* ip, u_char* mac) { int cont = 0, cant = 0; for (int i = 0; i < usuarios.size(); i++) { cont = 0; for (int j = 0; j < 4; j++) if (ip[j] != usuarios[i].ip[j]) { cont++; break; } for (int j = 0; j < 6; j++) if (mac[j] != usuarios[i].mac[j]) { cont++; break; } if (cont == 2) cant++; } if (cant == usuarios.size()) { host usuario; for (int j = 0; j < 4; j++) usuario.ip[j] = ip[j]; for (int j = 0; j < 6; j++) usuario.mac[j] = mac[j]; usuarios.push_back(usuario); } }
Cuando pongo esto en "capturador.h" me sale el siguiente error:
Citar
Error 8 error LNK2005: ya se definió "public: void __thiscall lista_usuarios::insertar_host(unsigned char *,unsigned char *)" (?insertar_host@lista_usuarios@@QAEXPAE0@Z) en main.obj
Ya os digo que simplemente al mover el método a el ".cpp" se corrige el error, pero ¿porque no me deja meterlo en la cabecera? No hay más definiciones que yo sepa XD
Saludos y gracias como siempre.
Edito_ Estoy en ello:
https://support.microsoft.com/en-us/kb/148652/es
Edito: Solucionado de rara manera ahora entiendo el error:
http://www.cplusplus.com/forum/beginner/30800/
El último comentario lo explica, lo que hice fue meter el metodo en el cuerpo de la funcion y quitar su declaracion cambiandola por la del cuerpo del método:
Código
class lista_usuarios { private: vector<host> usuarios; public: //bool contiene_host(u_char* ip, u_char* mac); //void añadir_host(u_char* ip, u_char* mac); //void eliminar_host(u_char* ip, u_char* mac); void lista_usuarios::añadir_host(u_char* ip, u_char* mac) { int cont = 0, cant = 0; for (int i = 0; i < usuarios.size(); i++) { cont = 0; for (int j = 0; j < 4; j++) if (ip[j] != usuarios[i].ip[j]) { cont++; break; } for (int j = 0; j < 6; j++) if (mac[j] != usuarios[i].mac[j]) { cont++; break; } if (cont == 2) cant++; } if (cant == usuarios.size()) { host usuario; for (int j = 0; j < 4; j++) usuario.ip[j] = ip[j]; for (int j = 0; j < 6; j++) usuario.mac[j] = mac[j]; usuarios.push_back(usuario); } }; };
Funciona, aunque no creo que sea el mejor método (pero al menos ya lo tengo en el ".h").
Saludos.