Erreur inattendue de fin de fichier

J’espère que vous pouvez m’aider, car je n’ai aucune idée de ce qui se passe. J’ai l’erreur suivante en essayant d’append la bibliothèque Beecrypt à mon projet:

erreur fatale C1010: fin de fichier inattendue lors de la recherche d’un en-tête précompilé. Avez-vous oublié d’append ‘#include “stdafx.h”‘ à votre source?

En fait, je n’ai pas oublié d’append #include “stdafx” à ma source. Le compilateur pointe l’erreur à la fin de ce fichier .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 Ssortingng& algorithm) throw (NoSuchAlgorithmException) { Security::spi* tmp = Security::getSpi(algorithm, "SecureRandom"); assert(dynamic_cast(tmp->cspi)); SecureRandom* result = new SecureRandom(reinterpret_cast(tmp->cspi), tmp->prov, tmp->name); delete tmp; return result; } SecureRandom* SecureRandom::getInstance(const Ssortingng& type, const Ssortingng& provider) throw (NoSuchAlgorithmException, NoSuchProviderException) { Security::spi* tmp = Security::getSpi(type, "SecureRandom", provider); assert(dynamic_cast(tmp->cspi)); SecureRandom* result = new SecureRandom(reinterpret_cast(tmp->cspi), tmp->prov, tmp->name); delete tmp; return result; } SecureRandom* SecureRandom::getInstance(const Ssortingng& type, const Provider& provider) throw (NoSuchAlgorithmException) { Security::spi* tmp = Security::getSpi(type, "SecureRandom", provider); assert(dynamic_cast(tmp->cspi)); SecureRandom* result = new SecureRandom(reinterpret_cast(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*) tmp->cspi)); _rspi = (SecureRandomSpi*) tmp->cspi; _type = tmp->name; _prov = tmp->prov; delete tmp; } SecureRandom::SecureRandom(SecureRandomSpi* rspi, const Provider* provider, const Ssortingng& 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 Ssortingng& SecureRandom::getType() const throw () { return _type; } const Provider& SecureRandom::getProvider() const throw () { return *_prov; } 

et voici le fichier 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 Ssortingng& type) throw (NoSuchAlgorithmException); static SecureRandom* getInstance(const Ssortingng& type, const Ssortingng& provider) throw (NoSuchAlgorithmException, NoSuchProviderException); static SecureRandom* getInstance(const Ssortingng& type, const Provider& provider) throw (NoSuchAlgorithmException); static void getSeed(byte*, int); private: SecureRandomSpi* _rspi; const Provider* _prov; Ssortingng _type; protected: SecureRandom(SecureRandomSpi* spi, const Provider* provider, const Ssortingng& type); public: SecureRandom(); virtual ~SecureRandom(); void generateSeed(byte*, int); void nextBytes(byte*, int); void setSeed(const byte*, int); const Ssortingng& getType() const throw (); const Provider& getProvider() const throw (); }; } } #endif #endif 

Désolé pour tant de code.

Allez à SolutionExplorer (devrait être déjà visible, sinon utiliser le menu: Affichage-> SolutionExplorer).

Trouvez votre fichier .cxx dans l’arborescence des solutions, cliquez dessus avec le bouton droit et choisissez “Propriétés” dans le menu contextuel. Vous obtiendrez une fenêtre avec les propriétés de votre fichier.

En utilisant l’arborescence du côté gauche, allez à la section “En-têtes C ++ / précompilés”. Sur le côté droit de la fenêtre, vous aurez trois propriétés. Définissez la propriété nommée “Créer / Utiliser un en-tête précompilé” sur la valeur “Ne pas utiliser les en-têtes précompilés”.

Vous avez oublié d’inclure stdafx.h dans votre source (car je ne peux pas voir votre code). Si vous ne l’avez pas fait, assurez-vous que #include "stdafx.h" est la première ligne de votre fichier .cpp , sinon vous verrez la même erreur même si vous avez inclus "stdafx.h" dans votre fichier source (mais pas au tout début du fichier).

Si vous n’utilisez pas les en-têtes précompilés dans votre projet, définissez la propriété Créer / Utiliser un en-tête précompilé des fichiers source sur Ne pas utiliser les en-têtes précompilés. Pour définir cette option du compilateur, procédez comme suit:

  • Dans le volet Explorateur de solutions du projet, cliquez avec le bouton droit sur le nom du projet, puis cliquez sur Properties .
  • Dans le volet gauche, cliquez sur le dossier C/C++ .
  • Cliquez sur le nœud En- Precomstackd Headers .
  • Dans le volet droit, cliquez sur Create/Use Precomstackd Header , puis cliquez sur Not Using Precomstackd Headers .

La ligne #include "stdafx.h" doit être la première ligne en haut de chaque fichier source, avant tout autre fichier d’en-tête.

Si ce que vous avez montré est l’intégralité .cxx fichier .cxx , vous avez oublié d’inclure stdafx.h dans ce fichier.

J’ai aussi eu cette erreur, mais pour un fichier .h . Le correctif était d’aller dans les Properties du fichier (via le menu contextuel du fichier de l’explorateur de solutions) et de définir le type de fichier correctement. Il a été défini sur C/C++ Comstackr au lieu de l’en- C/C++ header correct.

J’ai rencontré cette erreur lorsque j’ai oublié de décocher l’en-tête précompilé des options supplémentaires de l’assistant après avoir nommé une nouvelle application console Win32.

Comme je n’ai pas besoin de la bibliothèque stdafx.h, je l’ai supprimée en allant dans le menu Projet , puis cliquez sur Propriétés ou sur [nom de notre projet] Propriétés ou appuyez simplement sur Alt + F7 . Dans la liste déroulante à côté de la configuration, sélectionnez Toutes les configurations . En dessous de cela, se trouve un nœud d’arborescence, cliquez sur Propriétés de configuration , puis sur C / C ++ . Dans le volet droit, sélectionnez Créer / Utiliser un en-tête précompilé et choisissez Ne pas utiliser d’en-tête précompilé .

Modifiez la plate-forme de votre projet C ++ à “x64” (ou la plate-forme que vous ciblez) au lieu de “Win32”. Cela se trouve dans Visual Studio sous Build -> Configuration Manager. Recherchez votre projet dans la liste et modifiez la colonne Plate-forme. N’oubliez pas de le faire pour toutes les configurations de solution.