Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sdl_net

Iniciado por Douch, 29 de Septiembre de 2005, 02:12:22 PM

« anterior - próximo »

Douch

 Estoy trasteando con SDL_Net en VC++6 y tengo un problemilla con la función SDLNet_ResolveIP.

Según el manual online de la librería:
Citar3.2.2 SDLNet_ResolveIP

char *SDLNet_ResolveIP(IPaddress *address)

address
    This points to the IPaddress that will be resolved to a host name. The address->port is ignored.

Resolve the IPv4 numeric address in address->host, and return the hostname as a string.

Returns: a valid char pointer (string) on success. the returned hostname will have host and domain, as in "host.domain.ext". NULL is returned on errors, such as when it's not able to resolve the host name. The returned pointer is not to be freed. Each time you call this function the previous pointer's data will change to the new value, so you may have to copy it into a local buffer to keep it around longer.

Ejemplo:
// resolve the host name of the address in ipaddress
//IPaddress ipaddress;
char *host;
if(!(host=SDLNet_ResolveIP(&ipaddress))) {
   printf("SDLNet_ResolveIP: %s\n", SDLNet_GetError());
   exit(1);
}

El problema que tengo es que, al intentar obtener el hostname mediante la asignación que pone en el ejemplo

host=SDLNet_ResolveIP(&ipaddress)

me salta el siguiente error de compilación

error C2440: '=' : cannot convert from 'const char *' to 'char *'

y la verdad, no entiendo porqué. ¿Alguien que haya trasteado con esta librearía (o no) sabe que puede ocurrir o como solucionarlo?

Thx!.

LC0

 Pues pasa que se ve que para hacer los ejemplos, habrán estado compilando con gcc u otro mucho más "standard-compliant" que VC 6 ,que tiene bastantes peculiaridades en el lenguaje.
Yo estuve algún tiempo usándolo y, por ejemplo, no podía hacer cosas como:

for(int i=0; i<n;i++);


Sino que tenía que sustituirlo por:

int i;
for(i=0;i<n;i++)


Mi sugerencia: Búscate otro compilador para no encontrarte más sorpresas de esas :D.

LC0

 Por cierto, a todo esto, una pregunta: Has trasteado con las funciones para UDP con relativo éxito?

Douch

 Vaya, creo que solucionado. Ahora el compilador no me da error.
He puesto delante de la declaración de la variable
char *host
un const y he igualado host a NULL y todo perfecto.
Citarconst char *host = NULL;
Quizás ellos no lo han necesitado por lo que dice LCO, que hayan usado otro compilador diferente al de VC++6.

Yo siempre he pensado que una variable a la que se le aplica el modificador const, nunca podía ser modificada. Y esto es así, lo que no aprendí en su día era que dependiendo del contexto en el que se colocase const se podían hacer unas cosas u otras. Buscando una solución para el problema anterior me topé con ésto visto en ésta página:

const int x;      // constant int
x = 2;            // illegal - can't modify x

const int* pX;    // changeable pointer to constant int
*pX = 3;          // illegal -  can't use pX to modify an int
pX = &someOtherIntVar;      // legal - pX can point somewhere else

int* const pY;              // constant pointer to changeable int
*pY = 4;                    // legal - can use pY to modify an int
pY = &someOtherIntVar;      // illegal - can't make pY point anywhere else

const int* const pZ;        // const pointer to const int
*pZ = 5;                    // illegal - can't use pZ to modify an int
pZ = &someOtherIntVar;      // illegal - can't make pZ point anywhere else


Lo dicho, nunca te acostarás sin saber un poco más.


Cita de: "LC0"Por cierto, a todo esto, una pregunta: Has trasteado con las funciones para UDP con relativo éxito?
Uff, todavía no, quería meterme primero con TCP antes que darle caña al UDP, que veo que éste último me va a dar tantos quebraderos como te está dando a tí :P

LC0

 
Citar
Yo siempre he pensado que una variable a la que se le aplica el modificador const, nunca podía ser modificada
Claro, pero si pones const a un puntero estás diciendo que lo que es realmente constante es el puntero. Vamos, que siempre ha de apuntar al mismo sitio. Otra cosa es que cambie de valor de lo que está apuntando.
EDITADO: Me pasa por no haberme leido entero tu mensaje :).

Y con respecto a lo del UDP con el SDL_Net, ufffff.... no comment :P:D. Acabo de bajarme GNet, que es LGPL, y a ver que tal va.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.