, tengo una clase definida en la cabecera, pero al poner sus métodos dentro de la cabecera (archivo ".h") me da error sin embargo al poner sus métodos en el ".cpp" no da error, ¿que solución puedo tomar?.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.





Autor




En línea



