[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