Hola. La situación es la siguiente ...
Estoy realizando un trabajo referente a redes MPLS empleando el programa OMNeT++. Para esto, instalé Microsoft Visual Studio .NET 2003, ya que el empleo del programa OMNeT++ requiere su instalación. La versión anterior (Visual C++ 6.0) causa errores de compilación y recientemente sacaron compatibilidad para el Studio .NET 2005.
OMNeT++ se basa en el uso de clases para el funcionamiento de módulos simples, los cuales son programados en C++. Tengo el archivo Routingtable.h donde declaro los siguiente:
#ifndef _ROUTINGTABLE_H
#define _ROUTINGTABLE_H
#include <omnetpp.h>
#include <string.h>
using std::string;
struct table
{
string srcip;
string mask;
string interin;
int hop;
string destip;
string interout;
string type;
};
class Routingtable : public cSimpleModule
{
public:
void addroute(string, string , string , string , int , string);
void addinterout(string , string , string);
void findroute(string);
private:
int structs;
int flag;
string interfaceout;
table rt[10];
};
#endif
y en el archivo Routingtable.cpp delcaro el cuerpo de cada una de las funciones prototipo declaradas en el Routingtable.h. Luego, cree el archivo IP_R.h y el IP_R.cpp. En el archivo IP_R.cpp necesito llamar a la función "void findroute(string)" del Routingtable.h. He intendado muchas formas y no logro encontrar la forma cómo llamar esa función. Puse el #include "Routingtable.h" en el IP_R.cpp para así llamar la función.
Dentro del IP_R.cpp primero puse: findroute("hola"); como prueba para observar si se lograba llamar a la función; sin embargo, esto generó el siguiente error:
IP_R.cpp(29): error C3861: 'findroute': identifier not found, even with argument-dependent lookup
Entonces busqué en internet y encontré que no se pueden llamar funciones de clases y éstas no son estáticas o no se hace referencia a un "objeto". Por lo cual, en el IP_R.h coloqué lo siguiente:
#ifndef IP_R_H
#define IP_R_H
#include <omnetpp.h>
#include <string.h>
using std::string;
#include "IPDatagram_m.h"
class Routingtable; <-------------------
class IP : public cSimpleModule
{
public:
Routingtable *rta; <-------------------
void handlemessage(cMessage *msg);
private:
int pktsin;
int pktsout;
protected:
virtual void initialize();
virtual void finish();
void display(char *);
};
#endif
Y en el IP_R.cpp, además de poner el #include "Routingtable.h", puse:
rta = new Routingtable();
rta->findroute("hola");
Lo cual me genera el siguiente error:
IP_R.obj : error LNK2019: unresolved external symbol "public: void __thiscall Routingtable::findroute(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char>>)" (?findroute@Routingtable@@QAEXV?$basic_string@DU?$char_traits@D@std@@@@V?$allocator@D@2@@std@@@Z) referenced in function "public: void __thiscall IP::handlemessage(class cMessage *)" (?handlemessage@IP@@QAEXPAVcMessage@@@Z)
IP.exe : fatal error LNK1120: 1 unresolved externals
No soy muy conocedor de clases en C++, de código simple sí. Alguien me podría ayudar porfavor? Muchas gracias.