web-dev-qa-db-fra.com

Erreur de fin de fichier inattendue

J'espère que vous pourrez m'aider, car je n'ai aucune idée de ce qui se passe. J'ai l'erreur suivante en essayant d'ajouter 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'ajouter '#include "stdafx.h"' à votre source?

En fait, je n’ai pas oublié d’ajouter #include "stdafx" à ma source. Le compilateur indique que l'erreur se trouve à 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 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;
  }

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 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

Désolé pour tant de code.

51
Andrey Chernukha

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

Recherchez votre fichier .cxx dans l'arborescence de la solution, cliquez dessus avec le bouton droit de la souris 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’arbre de 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 d’en-têtes précompilés".

123
Wacek

Si vous n'utilisez pas d'en-têtes précompilés dans votre projet, définissez la propriété Créer/Utiliser les en-têtes précompilés 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 de gauche, cliquez sur le dossier C/C++.
  • Cliquez sur le nœud Precompiled Headers.
  • Dans le volet de droite, cliquez sur Create/Use Precompiled Header, Puis sur Not Using Precompiled Headers.
11
Maheswar Reddy

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 .cpp fichier, sinon vous verrez la même erreur même si vous avez inclus "stdafx.h" dans votre fichier source (mais pas dans le très début du fichier).

10
Nawaz

J'ai aussi eu cette erreur, mais pour un .h fichier. Le correctif était d'aller dans le fichier Properties (via le menu contextuel du fichier de l'Explorateur de solutions) et de définir le type de fichier correctement. Il était réglé sur C/C++ Compiler au lieu du bon C/C++ header.

6
jnnnnn

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

Si ce que vous avez montré est le fichier entier .cxx, Alors vous avez oublié d'inclure stdafx.h Dans ce fichier. .

5
Cody Gray

J'ai rencontré cette erreur lorsque j'ai oublié de décocher l'en-tête précompilé parmi les options supplémentaires de l'Assistant après avoir nommé une nouvelle application de 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 en cliquant sur Propriétés ou Propriétés de [nom de notre projet] ou appuyez simplement sur Alt + F7. Dans la liste déroulante en regard de la configuration, sélectionnez Toutes les configurations. Au-dessous de cela, se trouve un nœud d’arbre, cliquez sur Propriétés de configuration, puis sur C/C++. Dans le volet de droite, sélectionnez Créer/utiliser un en-tête précompilé, puis choisissez sans en-tête précompilé.

4
MiddleKay

Modifiez la plate-forme de votre projet C++ en "x64" (ou selon 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.

1
JordanBean