[C con Clase] Unresolved external symbol referenced from module

abraxas abraxas abraxas_dragon en yahoo.com.mx
Jue Feb 22 23:23:35 CET 2007


Estimado Steven, muchas gracias por tus comentarios.

Fíjate que precisamente abía contemplado el echo de usar una función echa en C dentro de un programa C++. Por lo tanto mi archivo cabecera (funciones.h) ya contiene lo que me recomiendas.
-----------------------------------------------------------------
/*funciones.h*/
#ifndef _FUNCIONES_H_
#define _FUNCIONES_H_

#ifdef __cplusplus
  extern "C" {
#endif

void OperacionesArchivo(void);
...

#ifdef __cplusplus
  }
#endif

#endif /* _FUNCIONES_H_ */

/*****************************************/

/*funciones.c*/
#include "funciones.h"

void OperacionesArchivo(void)
{
...
}

/*****************************************/

/*TMiPrograma.cpp*/
#include "funciones.h"

...

void __fastcall TFormaMiPrograma::Button1Click(TObject *Sender)
{
    OperacionesArchivo();
}

-----------------------------------------
Estoy un poco consternado, por que supuestamente estoy haciendo las cosas tal cual las estoy leyendo.


----- Mensaje original ----
De: Steven Davidson <steven en conclase.net>
Para: cconclase en listas.conclase.net
Enviado: jueves, 22 de febrero, 2007 15:38:03
Asunto: Re: [C con Clase] Unresolved external symbol referenced from module

Hola Abraxas,

El pasado 2007-02-22 18:03:32, ERVA escribió:

E> Hola, estoy haciendo un programita en C++ Builder. Tengo una unidad (*.cpp) y le agrego una cabecera (*.h) que implementa algunas funciones que uso (OperacionesArchivo, *.c). Pero al momento cuando la compilo me lanza el siguiente error:
E> [Linker Error] Unresolved external '_OperacionesArchivo' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER5\PROJECTS\MIPROGRAMA.OBJ
E> Me pueden decir por que me lanza ese error y como es posible solucionarlo.

Sospecho que el problema está en que usas una función de C en un programa de C++. Deberías modificar tu fichero de cabecera de esta manera,

// funciones.h

#ifdef __cplusplus
extern "C" {
#endif

void OperacionesArchivo( void );
...

#ifdef __cplusplus
}
#endif

Lo que hacemos es decir al compilador y enlazador que trate el contenido entre llaves de 'extern "C"' como si fuese código escrito en C. Bajo C++, los nombres de ciertas entidades son modificadas; esto se llama decoración o codificación. Bajo C, esto no suele ser el caso. Por lo tanto, los nombres no coinciden, y el enlazador se queja.


Espero que esto te sea de ayuda.

Steven
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ







	
	
		
___________________________________________________________ 
Do You Yahoo!? 
La mejor conexión a Internet y <b >2GB</b> extra a tu correo por $100 al mes. http://net.yahoo.com.mx 
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070222/5c0f58bc/attachment.html>


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