我希望你能帮助我,因为我不知道发生了什么。尝试将Beecrypt库添加到我的项目时,我遇到以下错误:
致命错误C1010:查找预编译标头时意外结束文件。您是否忘记在源代码中添加“#include”stdafx.h“'?
实际上我没有忘记将#include“stdafx”添加到我的源代码中。编译器将错误指向此.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;
}
这是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
很抱歉这么多代码。
答案 0 :(得分:120)
转到SolutionExplorer(应该已经可见,如果没有使用菜单:View-&gt; SolutionExplorer)。
在解决方案树中找到您的.cxx文件,右键单击它并从弹出菜单中选择“属性”。您将获得包含文件属性的窗口。
使用左侧的树转到“C ++ /预编译标题”部分。在窗口的右侧,您将获得三个属性。将名为“Create / Use Precompiled Header”的属性设置为“Not Using precompiled Headers”的值。
答案 1 :(得分:11)
如果未在项目中使用预编译头,请将源文件的“创建/使用预编译头”属性设置为“不使用预编译头”。要设置此编译器选项,请按照下列步骤操作:
Properties
。C/C++
文件夹。Precompiled Headers
节点。Create/Use Precompiled Header
,然后点击Not Using Precompiled Headers
。答案 2 :(得分:10)
您确实忘记在源代码中包含stdafx.h
(因为我无法看到您的代码)。如果您没有,请确保#include "stdafx.h"
是.cpp
文件中的第一个行,否则即使您已包含{{1},也会看到相同的错误在您的源文件中(但不在文件的开头中)。
答案 3 :(得分:5)
在包含任何其他标头文件之前,行#include "stdafx.h"
必须是每个源文件顶部的第一行。
如果您展示的是整个.cxx
文件,那么您 忘记在该文件中加入stdafx.h
。
答案 4 :(得分:5)
我也遇到了这个错误,但对于.h
文件。修复是进入文件Properties
(通过解决方案资源管理器的文件弹出菜单)并正确设置文件类型。它设置为C/C++ Compiler
而不是正确的C/C++ header
。
答案 5 :(得分:4)
当我在命名新的Win32控制台应用程序后忘记从向导中的其他选项中取消选中预编译头时,我遇到了该错误。
因为我不需要stdafx.h库,所以我通过转到项目菜单删除它,然后点击属性或 [我们项目的名称]属性或只需按 Alt + F7 。在配置旁边的下拉列表中,选择所有配置。在下面是树节点,单击配置属性,然后单击 C / C ++ 。在右侧窗格中,选择创建/使用预编译标题,然后选择不使用预编译标题。
答案 6 :(得分:1)
将C ++项目的平台更改为“x64”(或您要定位的任何平台)而不是“Win32”。这可以在Build - &gt;下的Visual Studio中找到。配置管理器。在列表中找到您的项目并更改Platform列。不要忘记为所有解决方案配置执行此操作。