Unexpected end of file error
Solution 1
Goto SolutionExplorer (should be already visible, if not use menu: View->SolutionExplorer).
Find your .cxx file in the solution tree, right click on it and choose "Properties" from the popup menu. You will get window with your file's properties.
Using tree on the left side go to the "C++/Precompiled Headers" section. On the right side of the window you'll get three properties. Set property named "Create/Use Precompiled Header" to the value of "Not Using Precompiled Headers".
Solution 2
If you do not use precompiled headers in your project, set the Create/Use Precompiled Header property of source files to Not Using Precompiled Headers. To set this compiler option, follow these steps:
- In the Solution Explorer pane of the project, right-click the project name, and then click
Properties
. - In the left pane, click the
C/C++
folder. - Click the
Precompiled Headers
node. - In the right pane, click
Create/Use Precompiled Header
, and then clickNot Using Precompiled Headers
.
Solution 3
You did forget to include stdafx.h
in your source (as I cannot see it your code). If you didn't, then make sure #include "stdafx.h"
is the first line in your .cpp
file, otherwise you will see the same error even if you've included "stdafx.h"
in your source file (but not in the very beginning of the file).
Solution 4
I also got this error, but for a .h
file. The fix was to go into the file Properties
(via Solution Explorer's file popup menu) and set the file type correctly. It was set to C/C++ Compiler
instead of the correct C/C++ header
.
Solution 5
The line #include "stdafx.h"
must be the first line at the top of each source file, before any other header files are included.
If what you've shown is the entire .cxx
file, then you did forget to include stdafx.h
in that file.
Andrey Chernukha
Updated on July 05, 2022Comments
-
Andrey Chernukha almost 2 years
I hope you can help me, cause I have no idea about what's going on. I'm having the following error while trying to add Beecrypt library to my project:
fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?
Actually I did not forget to add #include "stdafx" to my source. The compiler points the error to be at the end of this .cxx file:
#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; }
and here is h file:
#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
Sorry for so much code.
-
Andrey Chernukha over 12 yearsWhen i made it FIRST line i became unable to include "beecrypt/c++/security/SecureRandom.h". It tells me that there's no such file or directory
-
Dietmar Kühl over 12 years@AndreyChernukha That is a separate issue, though, which won't be fixed by omitting
#include <stdafx.h>
! The compiler doesn't do anything with your code until it has found this header. It didn't go looking for your header. If you don't want to include<stdafx.h>
you need to turn off precompiled headers. -
Andrey Chernukha over 12 yearsHow can it be that i'm able to open that ("beecrypt/c++/security/SecureRandom.h") file in my main.cpp file but not in SecureRandom.cxx?
-
dumbledad over 9 yearsI was following the Walkthrough: Creating and Using a Dynamic Link Library (C++) and had misread "clear the Precompiled header check box" as "check the Precompiled header check box"! Doh.
-
Slate over 7 yearsI thought it was a setting for the entire project and didn't realise that individual files can have different Precompiled Headers options. This worked, thanks!
-
Jonathan Wood over 7 yearsBut does anyone know why the error occurs, and why this error appears when stdafx.h is in fact being included?
-
ComradeJoecool over 6 yearsthis solved it for me too since I had one .cpp that was using the precompiled header and one .c that was not.
-
Rathma about 6 yearsI had the same issue and your solution solved it!, I think it happens when you create a .cpp file and then rename it into a header file..
-
Mohammed Noureldin about 5 yearsThe hint that evey single file can have its own Precompiled header is nice. However, this is only a workaround in my opinion.
-
Roman2452809 almost 5 yearsThanks to both of you, guys! There is really this issue when you create a .cpp file by mistake and then rename it to .h file.
-
Rick over 4 yearsIt works, why this works? The other reasonable solutions did not work out, but this one did it and there's no apparent reason or explanation for this, yet.