uso stdafx reparar precompilado omite olvidó inesperado fuente error encabezado directiva código compruebe buscar archivo agregar c++ visual-studio-2008 visual-c++ compiler-errors precompiled-headers

c++ - stdafx - se omite al buscar el uso del encabezado precompilado



Error inesperado al final del archivo (7)

Cambia la plataforma de tu proyecto de C ++ a "x64" (o la plataforma a la que te diriges) en lugar de "Win32". Esto se puede encontrar en Visual Studio en Build -> Configuration Manager. Encuentre su proyecto en la lista y cambie la columna Plataforma. No olvides hacer esto para todas las configuraciones de soluciones.

Espero que me puedas ayudar, porque no tengo idea de lo que está pasando. Tengo el siguiente error al intentar agregar la biblioteca de Beecrypt a mi proyecto:

error fatal C1010: final inesperado del archivo al buscar el encabezado precompilado. ¿Olvidaste agregar ''#include'' stdafx.h '''' a tu fuente?

En realidad, no me olvidé de agregar #include "stdafx" a mi fuente. El compilador señala que el error se encuentra al final de este archivo .cxx:

#define BEECRYPT_CXX_DLL_EXPORT #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "beecrypt/c++/security/SecureRandom.h" #include "beecrypt/c++/security/SecureRandomSpi.h" #include "beecrypt/c++/security/Security.h" using namespace beecrypt::security; SecureRandom* SecureRandom::getInstance(const String& algorithm) throw (NoSuchAlgorithmException) { Security::spi* tmp = Security::getSpi(algorithm, "SecureRandom"); assert(dynamic_cast<SecureRandomSpi*>(tmp->cspi)); SecureRandom* result = new SecureRandom(reinterpret_cast<SecureRandomSpi*>(tmp->cspi), tmp->prov, tmp->name); delete tmp; return result; } SecureRandom* SecureRandom::getInstance(const String& type, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException) { Security::spi* tmp = Security::getSpi(type, "SecureRandom", provider); assert(dynamic_cast<SecureRandomSpi*>(tmp->cspi)); SecureRandom* result = new SecureRandom(reinterpret_cast<SecureRandomSpi*>(tmp->cspi), tmp->prov, tmp->name); delete tmp; return result; } SecureRandom* SecureRandom::getInstance(const String& type, const Provider& provider) throw (NoSuchAlgorithmException) { Security::spi* tmp = Security::getSpi(type, "SecureRandom", provider); assert(dynamic_cast<SecureRandomSpi*>(tmp->cspi)); SecureRandom* result = new SecureRandom(reinterpret_cast<SecureRandomSpi*>(tmp->cspi), tmp->prov, tmp->name); delete tmp; return result; } void SecureRandom::getSeed(byte* data, int size) { entropyGatherNext(data, size); } SecureRandom::SecureRandom() { Security::spi* tmp = Security::getFirstSpi("SecureRandom"); assert(dynamic_cast<SecureRandomSpi*>((SecureRandomSpi*) tmp->cspi)); _rspi = (SecureRandomSpi*) tmp->cspi; _type = tmp->name; _prov = tmp->prov; delete tmp; } SecureRandom::SecureRandom(SecureRandomSpi* rspi, const Provider* provider, const String& type) { _rspi = rspi; _prov = provider; _type = type; } SecureRandom::~SecureRandom() { delete _rspi; } void SecureRandom::generateSeed(byte* data, int size) { _rspi->engineGenerateSeed(data, size); } void SecureRandom::setSeed(const byte* data, int size) { _rspi->engineSetSeed(data, size); } void SecureRandom::nextBytes(byte* data, int size) { _rspi->engineNextBytes(data, size); } const String& SecureRandom::getType() const throw () { return _type; } const Provider& SecureRandom::getProvider() const throw () { return *_prov; }

y aquí está el archivo h:

#ifndef _CLASS_BEE_SECURITY_SECURERANDOM_H #define _CLASS_BEE_SECURITY_SECURERANDOM_H #include "beecrypt/beecrypt.h" #ifdef __cplusplus #include "beecrypt/c++/security/SecureRandomSpi.h" using beecrypt::security::SecureRandomSpi; #include "beecrypt/c++/security/Provider.h" using beecrypt::security::Provider; #include "beecrypt/c++/security/NoSuchAlgorithmException.h" using beecrypt::security::NoSuchAlgorithmException; #include "beecrypt/c++/security/NoSuchProviderException.h" using beecrypt::security::NoSuchProviderException; namespace beecrypt { namespace security { /*!/ingroup CXX_SECURITY_m */ class BEECRYPTCXXAPI SecureRandom : public Object { public: static SecureRandom* getInstance(const String& type) throw (NoSuchAlgorithmException); static SecureRandom* getInstance(const String& type, const String& provider) throw (NoSuchAlgorithmException, NoSuchProviderException); static SecureRandom* getInstance(const String& type, const Provider& provider) throw (NoSuchAlgorithmException); static void getSeed(byte*, int); private: SecureRandomSpi* _rspi; const Provider* _prov; String _type; protected: SecureRandom(SecureRandomSpi* spi, const Provider* provider, const String& type); public: SecureRandom(); virtual ~SecureRandom(); void generateSeed(byte*, int); void nextBytes(byte*, int); void setSeed(const byte*, int); const String& getType() const throw (); const Provider& getProvider() const throw (); }; } } #endif #endif

Lo siento por tanto código.


Encontré ese error cuando olvidé desmarcar el encabezado precompilado de las opciones adicionales en el asistente después de nombrar una nueva aplicación de consola Win32.

Como no necesito la biblioteca stdafx.h, la eliminé yendo al menú Proyecto , luego hago clic en Propiedades o [nombre de nuestro proyecto] Propiedades o simplemente presiono Alt + F7 . En la lista desplegable junto a la configuración, seleccione Todas las configuraciones . Debajo de eso, hay un nodo árbol, haga clic en Propiedades de configuración , luego en C / C ++ . En el panel derecho, seleccione Crear / Usar encabezado precompilado y elija No usar encabezado precompilado .


Goto SolutionExplorer (debería estar ya visible, si no usa el menú: Ver-> SolutionExplorer).

Busque su archivo .cxx en el árbol de soluciones, haga clic derecho sobre él y seleccione "Propiedades" en el menú emergente. Obtendrá una ventana con las propiedades de su archivo.

Usando el árbol en el lado izquierdo ve a la sección "C ++ / encabezados precompilados". En el lado derecho de la ventana obtendrás tres propiedades. Establezca la propiedad denominada "Crear / Usar encabezado precompilado" con el valor "No usar encabezados precompilados".


La línea #include "stdafx.h" debe ser la primera línea en la parte superior de cada archivo fuente, antes de que se incluyan otros archivos de encabezado.

Si lo que has mostrado es el archivo completo .cxx , entonces olvidaste incluir stdafx.h en ese archivo.


Si no usa encabezados precompilados en su proyecto, configure la propiedad Crear / Usar encabezado precompilado de los archivos de origen en No usar encabezados precompilados. Para establecer esta opción del compilador, siga estos pasos:

  • En el panel Explorador de soluciones del proyecto, haga clic con el botón derecho en el nombre del proyecto y luego haga clic en Properties .
  • En el panel izquierdo, haz clic en la carpeta C/C++ .
  • Haga clic en el nodo Precompiled Headers .
  • En el panel derecho, haga clic en Create/Use Precompiled Header y luego en Not Using Precompiled Headers .

También recibí este error, pero para un archivo .h . La solución fue ingresar al archivo Properties (a través del menú emergente de archivos del Solution Explorer) y configurar el tipo de archivo correctamente. Se configuró para el C/C++ Compiler lugar del C/C++ header correcto.


stdafx.h incluir stdafx.h en tu fuente (ya que no puedo ver tu código). Si no lo hizo, asegúrese de que #include "stdafx.h" sea ​​la primera línea en su archivo .cpp , de lo contrario verá el mismo error incluso si ha incluido "stdafx.h" en su archivo de origen (pero no en el comienzo del archivo).