Подтвердить что ты не робот

Неожиданный конец ошибки файла

Надеюсь, ты поможешь мне, потому что я понятия не имею, что происходит. У меня возникла следующая ошибка при попытке добавить библиотеку 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

Извините за столько кода.

4b9b3361

Ответ 1

Перейти к SolutionExplorer (должно быть уже видно, если не использовать меню: View- > SolutionExplorer).

Найдите файл .cxx в дереве решений, щелкните его правой кнопкой мыши и выберите "Свойства" во всплывающем меню. Вы получите окно с вашими свойствами файла.

Используя дерево слева, перейдите в раздел "С++/Precompiled Headers". В правой части окна вы получите три свойства. Задайте свойство с именем "Создать/Использовать предварительно скомпилированный заголовок" на значение "Не использовать предварительно скомпилированные заголовки".

Ответ 2

Вы забыли включить stdafx.h в свой источник (так как я не вижу его код). Если вы этого не сделали, убедитесь, что #include "stdafx.h" - это строка первая в вашем .cpp файле, иначе вы увидите ту же ошибку, даже если вы включили "stdafx.h" в исходный файл (но не в самом начале файла).

Ответ 3

Если вы не используете предварительно скомпилированные заголовки в своем проекте, установите для параметра "Создать/Использовать прекомпилированный заголовок" исходные файлы "Не использовать предварительно сжатые заголовки". Чтобы установить этот параметр компилятора, выполните следующие действия:

  • В панели "Проводник решений" проекта щелкните правой кнопкой мыши имя проекта и выберите Properties.
  • На левой панели щелкните папку C/C++.
  • Нажмите Precompiled Headers node.
  • На правой панели нажмите Create/Use Precompiled Header, а затем нажмите Not Using Precompiled Headers.

Ответ 4

Строка #include "stdafx.h" должна быть первой строкой в ​​верхней части каждого исходного файла, прежде чем будут включены другие файлы заголовков.

Если вы указали весь файл .cxx, вы забыли включить stdafx.h в этот файл.

Ответ 5

Я также получил эту ошибку, но для файла .h. Исправление заключалось в том, чтобы войти в файл Properties (через всплывающее меню файла Solution Explorer) и правильно установить тип файла. Он был установлен в C/C++ Compiler вместо правильного C/C++ header.

Ответ 6

Я столкнулся с этой ошибкой, когда забыл снять заголовок Precompiled из дополнительных параметров в мастере после именования нового консольного приложения Win32.

Поскольку мне не нужна библиотека stdafx.h, я удалил ее, перейдя в меню Проект, затем нажмите Свойства или [название нашего проекта] Свойства или просто нажмите Alt + F7. В раскрывающемся списке рядом с конфигурацией выберите Все конфигурации. Ниже это дерево node, нажмите Свойства конфигурации, затем C/С++. На правой панели выберите Создать/Использовать предварительно скомпилированный заголовок и выберите Не использовать Precompiled Header.

Ответ 7

Измените платформу вашего проекта на С++ на "x64" (или на какую-либо платформу, на которую вы нацеливаете) вместо "Win32". Это можно найти в Visual Studio в разделе Build → Configuration Manager. Найдите свой проект в списке и измените столбец платформы. Не забудьте сделать это для всех конфигураций решений.