[C con Clase] Ayuda: Como declaro variables en un proyecto?

Steven Davidson steven en conclase.net
Vie Feb 16 06:59:18 CET 2007


Hola Diego,

El pasado 2007-02-16 05:37:46, D1e6o! escribió:

D> El pasado 2007-02-15 13:37:47, D1e6o! escribió:
D> Muchas gracias amigos.. realmente me sirvio.. pero no entendí del todo esto. 
D> Ahora tengo los mismos problemas con las funciones... me dice linker error: undefined reference to TiempoActual. Me sucede lo mismo... no se como declarar las funciones (lo mismo que antes pero no con variables)...

Según veo, has definido esta función en "tempor.c", pero "decla.h" no contiene su prototipo. Por lo tanto, al llegar a "main.cpp", el prototipo de 'TiempoActual()' no existe. El compilador debería darte un error. Tienes escrito en "decla.h" lo siguiente:

#ifndef  _DECLA
#define  _DECLA
DWORD GetTimer(void);
char InitTimer(void);
#endif

Quizá cambiaste el nombre de 'GetTimer()' a 'TiempoActual()' y por eso tienes problemas.

Si lo anterior no funciona o no es válido, entonces existen dos posibilidades:

1. Invocas la función 'TiempoActual()' en 'main()', pero con cantidades distintas de parámetros del prototipo o con tipos diferentes. El compilador acepta la sobrecarga de la función. Visto de otro modo, estás invocando otra "versión" de la misma función, pero como sólo has definido esa versión, el enlazador no encuentra la versión sobrecargada.

De todos modos, el enlazador debería haberte informado del error en la versión sobrecargada que estabas intentando usar. Es posible que el enlazador no está programado para dar tanta información y se limite a mostrar el nombre de la función.

2. Existen problemas con los nombres de las funciones. Veo que tienes "main.cpp", un fichero fuente de C++, y "tempor.c", uno de C. Esto puede crear conflictos. Lo que tienes que hacer es indicar al compilador/enlazador que ciertas entidades se consideren como código C y no C++. Esto sería,

extern "C"
{
#include "decla.h"
}

Ahora, el compilador y el enlazador aplicarán criterios propios de C y no de C++. En el caso de funciones, en C++ los nombres son "decorados" o "codificados" y por tanto no representan el nombre original dado por el programador. Esto suele ser diferente en C, donde los nombres de las funciones no son modificados.

D> Muchas gracias de nuevo por leer y responder realmente me sirvió..!! Saludos..!

De nada; para eso estamos.

D> (no esta funcionando la lista, no? no me llegan mensajes pero al meterme en la web de elistas me dice que ya estoy suscripto... y no esta ni en spam x las dudas)

No estoy seguro de lo que está pasando, pero lo averiguaremos tan pronto como nos sea posible.


Espero que lo anterior te ayude.

Steven


Más información sobre la lista de distribución Cconclase