• Miércoles 17 de Abril de 2024, 01:41

Autor Tema:  error D8045 en visulat c++ 2008  (Leído 3324 veces)

santivader

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
error D8045 en visulat c++ 2008
« en: Jueves 16 de Septiembre de 2010, 02:19 »
0
Antes que nada muy buenas a todos , soy nuevo en el foro asi que pido disculpas si este tema ya ha sido contestado anteriormente . mi problema es el siguiente : Estoy compilando un programa escrito en C , en visual C++ 2008 ; el programa tiene varias librerias .h y varios .c  me compile todo bien salvo uno de los archivos . c  que me da el siguiente error
"cl : Línea de comandos error D8045 : no se puede compilar el archivo de C '.Xxxxxxx.C' con la opción /clr"
  En opciones de proyecto -propiedades de config - c/c++ - avanzadas  tengo configurada la opcion Compilar como código de C (/TC)  y en la solapara general en la opcion Compatible con Common Language Runtime  tengo seleccionado    Compatible con Common Language Runtime (/clr)    con esa configuaracion el programa me da un solo error que es el anterio , si modifico a  no  es Compatible con Common Language Runtime tengo muchos erros como por ejemplo
""""Fatal error C1083: No se puede abrir el archivo incluir: 'print.h': No such file or directory""

Necesito ayuda con esto lo antes posible desde ya muca gracias . (de ser necesario les subo el codigo )

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: error D8045 en visulat c++ 2008
« Respuesta #1 en: Lunes 20 de Septiembre de 2010, 21:52 »
0
Lo primero es que no puedes activar el compilador de C con C++/CLI (la opción /clr), en modo mixto tienes que usar C++.

Lo otro es que te faltan las rutas a los ficheros.

Si te dice que no puede encontrar "print.h" es porque ese fichero no está en ningún sitio en donde busca el compilador, incluida la carpeta en donde está el fichero que hace la llamada de la inclusión.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

santivader

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: error D8045 en visulat c++ 2008
« Respuesta #2 en: Domingo 26 de Septiembre de 2010, 03:04 »
0
muchas gracias amigo ya entendi los de las opciones del compilador y la libreia gracias a tu orientacion y luego de un par de horas en la web mis errores se reducen basicamente ahora a :
swemptab.c
c:openastroopenastro.org-1.1.23.origpyswissephpyswisseph-1.75.01srcswemptab.c(84) : error C2061: error de sintaxis : identificador 'mertabl'
c:openastroopenastro.org-1.1.23.origpyswissephpyswisseph-1.75.01srcswemptab.c(84) : error C2059: error de sintaxis : ';'
c:openastroopenastro.org-1.1.23.origpyswissephpyswisseph-1.75.01srcswemptab.c(84) : error C3409: no se permite un bloque de atributos vacío


la linea de codigo donde me da el eroor es


static double FAR mertabl[] = {
          35.85255,        -163.26379, 53810162857.56026,      908082.18475,

           0.05214,          -0.07712,

           1.07258,           0.04008,           0.49259,           0.00230,
           0.02324,           0.05869,

           0.24516,           0.22898,          -0.06037,           0.13023,

           0.00331,          -0.03576,

           0.06464,           0.00089,
};

y lo otro son como 200 warning con
warning C4996: 'sprintf': This function or variable may be unsafe.



desde ya muchas gracias

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: error D8045 en visulat c++ 2008
« Respuesta #3 en: Domingo 26 de Septiembre de 2010, 10:53 »
0
Quita el "FAR" de la declaración del array. Eso es de la época de los 16 bits. Aparte de ser un anacronismo creo que ya no está definido en los compiladores modernos.

Lo del warning se debe a que sprintf() está "obsoleta" por MS ya que es uno de los caminos por los cuales se pueden producir fallos de seguridad mediante desbordamiento de bufer. El equivalente moderno es sprintf_s(), pero tiene más parámetros.

http://msdn.microsoft.com/en-us/library ... kh(v=VS.80).aspx

Ahí te explica que puedes o bien poner las funciones _s o bien poner

#define _CRT_SECURE_NO_WARNINGS

antes de las inclusiones de los ficheros cabecera estándar.

Yo te recomiendo que sustituyas las funciones normales por las seguras a no ser que necesites que tu código compile para linux o mac...
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

santivader

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: error D8045 en visulat c++ 2008
« Respuesta #4 en: Martes 28 de Septiembre de 2010, 02:54 »
0
efectivamente me soluciono mucho de los incovenientes el problema que tenia extructuras declaradas como

static struct plantb FAR  mer404 = {
  { 11, 14, 10, 11,  4,  5,  2,  0,  0,},
 6,
 merargs,
 mertabl,
 mertabb,
 mertabr,
 3.8709830979999998e-01,
};

y al quitarles el far  me dice
error C2079: 'mer404' utiliza struct 'plantb' sin definir
 error C2078: hay demasiados inicializadoresme

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: error D8045 en visulat c++ 2008
« Respuesta #5 en: Martes 28 de Septiembre de 2010, 09:40 »
0
Te está diciendo que has inicalizado la estructura (o el array de estructuras) con demasiados elementos. Mira a ver cual sobra.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

santivader

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: error D8045 en visulat c++ 2008
« Respuesta #6 en: Miércoles 29 de Septiembre de 2010, 22:33 »
0
miere pero no ecuentro cula me sobrea la extructura es


struct plantbl {
  char max_harmonic[9];
  char max_power_of_t;
  signed char *arg_tbl;
  double *lon_tbl;
  double *lat_tbl;
  double *rad_tbl;
  double distance;
};