Unexpected end of file error

133,720

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 click Not 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.

Share:
133,720
Andrey Chernukha
Author by

Andrey Chernukha

Updated on July 05, 2022

Comments

  • Andrey Chernukha
    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
    Andrey Chernukha over 12 years
    When 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
    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
    Andrey Chernukha over 12 years
    How 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
    dumbledad over 9 years
    I 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
    Slate over 7 years
    I 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
    Jonathan Wood over 7 years
    But does anyone know why the error occurs, and why this error appears when stdafx.h is in fact being included?
  • ComradeJoecool
    ComradeJoecool over 6 years
    this solved it for me too since I had one .cpp that was using the precompiled header and one .c that was not.
  • Rathma
    Rathma about 6 years
    I 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
    Mohammed Noureldin about 5 years
    The hint that evey single file can have its own Precompiled header is nice. However, this is only a workaround in my opinion.
  • Roman2452809
    Roman2452809 almost 5 years
    Thanks 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
    Rick over 4 years
    It 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.