La fin inattendue de l'erreur de fichier
J'espère que vous pourrez m'aider, car je n'ai aucune idée sur ce qui se passe. Je vais avoir l'erreur suivante en essayant d'ajouter Beecrypt bibliothèque de mon projet:
erreur fatale C1010: fin de fichier inattendue alors que la recherche d'un en-tête précompilé. Vous avez oublié d'ajouter " #include "stdafx.h"' de votre source?
En fait je n'ai pas oublier d'ajouter #include "stdafx" à ma source. Le compilateur points de l'erreur afin d'être à la fin de cette .cxx fichier:
#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 h fichier:
#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 la quantité de code.
- Êtes-vous essayer d'ajouter Beecrypt bibliothèque à votre
solution
séparémentproject
? - Peut-être, je ne sais pas exactement ce que tu veux dire.
- Mais si vous avez de l'expérience réussie de l'ajout Beecrypt à une solution, alors j'ai désespérément besoin de vos conseils. Si vous parlez le russe (je suppose qu'il en votre nom )- il serait peut-être plus pratique d'utiliser le russe?
- Je n'ai pas cette expérience, et je n'utilisez pas de VS plus. Mais je me souviens qu'il y a une sorte de paramètre pour activer cette les en-têtes précompilés fonctionnalité pour un projet distinct.
- je ne comprends pas ce que c'est que
- Oui, vous pouvez transformer les en-têtes précompilés sur et hors de votre projet de la fenêtre Propriétés.
Vous devez vous connecter pour publier un commentaire.
Goto SolutionExplorer (qui devrait déjà être visible, si ce n'est d'utiliser le menu: Affichage->SolutionExplorer).
Trouver votre .cxx fichier dans la solution de l'arborescence, cliquez droit dessus et choisissez "Propriétés" dans le menu contextuel. Vous obtiendrez la fenêtre avec votre fichier de propriétés.
À l'aide de l'arborescence sur le côté gauche, allez à la "C++/en-Têtes Précompilés" section. Sur le côté droit de la fenêtre, vous aurez trois propriétés. Définir une propriété nommée "création/Utilisation d'un en-Tête Précompilé" à la valeur de "ne Pas Utiliser les en-Têtes Précompilés".
Si vous n'utilisez pas les en-têtes précompilés dans votre projet, de la création/Utilisation d'un en-Tête Précompilé propriété des fichiers source à ne Pas Utiliser les en-Têtes Précompilés. Pour définir cette option du compilateur, suivez ces étapes:
Properties
.C/C++
dossier.Precompiled Headers
nœud.Create/Use Precompiled Header
, puis cliquez surNot Using Precompiled Headers
.Vous n'oubliez pas d'inclure
stdafx.h
dans votre code source (que je ne peux pas voir votre code). Si vous n'avez pas, alors assurez-vous#include "stdafx.h"
est le première ligne dans votre.cpp
fichier, sinon, vous verrez l'erreur, même si vous avez inclus"stdafx.h"
dans votre fichier source (mais pas dans le très début du fichier).#include <stdafx.h>
! Le compilateur ne pas faire n'importe quoi avec votre code jusqu'à ce qu'il a trouvé cet en-tête. Il n'est pas allé à la recherche de votre en-tête. Si vous ne voulez pas inclure<stdafx.h>
vous devez désactiver les en-têtes précompilés.J'ai aussi eu cette erreur, mais pour un
.h
fichier. La solution était d'aller dans le fichierProperties
(via l'Explorateur de fichier du menu contextuel) et de définir le type de fichier correctement. Il a été mis àC/C++ Compiler
au lieu de le corrigerC/C++ header
.La ligne
#include "stdafx.h"
doit être la première ligne en haut de chaque fichier source, avant tous les autres fichiers d'en-tête sont inclus.Si ce que vous avez montré, c'est l'ensemble de la
.cxx
le fichier, puis vous ne oubliez pas d'inclurestdafx.h
dans ce fichier.J'ai rencontré cette erreur quand j'ai oublié de décocher l'en-tête Précompilé à partir des options supplémentaires sont disponibles dans l'assistant après avoir nommé une nouvelle application console Win32.
Parce que je n'ai pas besoin stdafx.h la bibliothèque, je l'ai enlevé en allant à Projet menu, puis cliquez sur Propriétés ou [nom du projet] les Propriétés ou appuyez simplement sur Alt + F7. Sur la liste déroulante à côté de configuration, sélectionnez Toutes les Configurations. Au-dessous, est un nœud de l'arborescence, cliquez sur Propriétés de Configuration, puis C/C++. Sur le volet de droite, sélectionnez création/Utilisation d'un en-Tête Précompilé, et choisir Pas de l'aide d'en-Tête Précompilé.
Changement de la Plate-forme de votre projet C++ pour "x 64" (ou celui de la plate-forme de ciblage) au lieu de "Win32". Cela peut être trouvé dans Visual Studio sous Build -> Gestionnaire de Configuration. Trouvez votre projet dans la liste et modifiez la Plate-forme de colonne. N'oubliez pas de le faire pour toutes les configurations de solution.