42

मुझे आशा है कि आप मेरी मदद कर सकते हैं, क्योंकि मुझे पता नहीं है कि क्या हो रहा है। मेरे प्रोजेक्ट में बीक्रीप्ट लाइब्रेरी जोड़ने की कोशिश करते समय मुझे निम्न त्रुटि हो रही है:फ़ाइल त्रुटि का अप्रत्याशित अंत

घातक त्रुटि C1010: प्रीकंपील्ड हेडर की तलाश करते समय फ़ाइल का अप्रत्याशित अंत। क्या आप अपने स्रोत में '# शामिल "stdafx.h" जोड़ना भूल गए?

वास्तव में मैं अपने स्रोत में # शामिल "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; 
    } 

और यहाँ ज फ़ाइल है:

इतना कोड के लिए
#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

क्या आप बीक्रीप्ट लाइब्रेरी को अपने 'समाधान' में एक अलग 'प्रोजेक्ट' के रूप में जोड़ने की कोशिश कर रहे हैं? –

+0

हो सकता है, मुझे नहीं पता कि आपका क्या मतलब है। –

+0

लेकिन यदि आपके पास समाधान के लिए बीक्रीप्ट जोड़ने में सफल होने का अनुभव है तो मुझे आपकी सलाह की जरुरत है। यदि आप रूसी बोलते हैं (मुझे लगता है कि यह आपके नाम से है) - शायद रूसी का उपयोग करना अधिक सुविधाजनक होगा? –

उत्तर

11

आप अपने स्रोत में stdafx.h शामिल करना भूल गए हैं (क्योंकि मैं इसे आपका कोड नहीं देख सकता)। आपने नहीं किया है, तो यकीन है कि #include "stdafx.h" अपने .cpp फ़ाइल में पहले लाइन है, अन्यथा आप (के शुरुआत एक ही गलती है कि आप अपने स्रोत फ़ाइल में "stdafx.h" को शामिल किया है, भले ही देखेंगे लेकिन बहुत में नहीं फ़ाइल)।

+0

जब मैंने इसे पहली पंक्ति बनायी तो मैं "बीक्रीप्ट/सी ++/सुरक्षा/सिक्योररैंडम एचएच" शामिल करने में असमर्थ हो गया। यह मुझे बताता है कि ऐसी कोई फ़ाइल या निर्देशिका नहीं है –

+2

@AndreyChernukha यह एक अलग मुद्दा है, हालांकि, '# शामिल ' छोड़कर तय नहीं किया जाएगा! कंपाइलर आपके कोड के साथ कुछ भी नहीं करता है जब तक कि यह हेडर नहीं मिला हो। यह आपके हेडर की तलाश नहीं करता था। यदि आप ' 'शामिल नहीं करना चाहते हैं तो आपको प्रीकंपील्ड हेडर बंद करना होगा। –

+0

यह कैसे हो सकता है कि मैं अपनी मुख्य.cpp फ़ाइल में फ़ाइल ("बीक्रीप्ट/सी ++/सुरक्षा/SecureRandom.h") खोलने में सक्षम हूं लेकिन SecureRandom.cxx में नहीं? –

5

लाइन #include "stdafx.h" किसी भी अन्य शीर्षलेख फ़ाइलों को शामिल करने से पहले प्रत्येक स्रोत फ़ाइल के शीर्ष पर पहली पंक्ति होनी चाहिए।

क्या आप दिखाया है पूरे .cxx फ़ाइल है, तो आप उस फ़ाइल में stdafx.h शामिल करने के लिए भूल गए।

99

गोटो समाधान एक्सप्लोरर (यदि मेनू का उपयोग नहीं किया गया है, तो पहले से ही दिखाई देनी चाहिए: देखें-> समाधान एक्सप्लोरर)।

समाधान पेड़ में अपनी .cxx फ़ाइल ढूंढें, उस पर राइट क्लिक करें और पॉपअप मेनू से "गुण" चुनें। आपको अपनी फ़ाइल के गुणों के साथ विंडो मिल जाएगी।

बाईं ओर पेड़ का उपयोग "सी ++/प्रीकंपिल्ड हेडर" अनुभाग पर जाएं। खिड़की के दाहिने तरफ आपको तीन गुण मिलेगा। "प्रीकंपील्ड हेडर का उपयोग न करें" के मूल्य पर "प्रीकंपिल्ड हेडर बनाएं/उपयोग करें" नामक संपत्ति सेट करें।

+4

इस उत्तर ने समस्या को हल किया –

+0

मैं [वाकथ्रू: एक डायनामिक लिंक लाइब्रेरी (सी ++) बनाना और उपयोग करना (http://msdn.microsoft.com/en-us/library/ms235636.aspx) का पालन कर रहा था और " Precompiled शीर्षलेख चेक बॉक्स को "as" प्रीकंपील्ड हेडर चेक बॉक्स को चेक करें "साफ़ करें! रवींद्र। – dumbledad

+2

मैंने सोचा कि यह पूरी परियोजना के लिए एक सेटिंग थी और यह नहीं पता था कि अलग-अलग फाइलों में अलग-अलग प्रीकंपील्ड हेडर विकल्प हो सकते हैं। यह काम किया, धन्यवाद! – kjhf

2

मुझे उस त्रुटि का सामना करना पड़ा जब मैं एक नया Win32 कंसोल एप्लिकेशन नामकरण के बाद विज़ार्ड में अतिरिक्त विकल्पों से प्रीकंपील्ड हेडर को अनचेक करना भूल गया।

क्योंकि मैं stdafx.h पुस्तकालय की जरूरत नहीं है, मैं इसे परियोजना मेनू पर जाकर हटा दिया, उसके बाद गुण या गुण [हमारी परियोजना का नाम] या बस Alt + एफ 7 दबाएँ। कॉन्फ़िगरेशन के बगल में ड्रॉपडाउन सूची पर, सभी कॉन्फ़िगरेशन चुनें। इसके नीचे, एक पेड़ नोड है, कॉन्फ़िगरेशन गुण पर क्लिक करें, फिर सी/सी ++ पर क्लिक करें। दाएं फलक पर, चुनें प्रीकंपिल्ड हेडर बनाएं/उपयोग करें, और चुनें प्रीकंपील्ड हेडर का उपयोग न करें।

5

मुझे यह त्रुटि भी मिली, लेकिन .h फ़ाइल के लिए।फिक्स फ़ाइल Properties (समाधान एक्सप्लोरर के फ़ाइल पॉपअप मेनू के माध्यम से) में जाना था और फ़ाइल प्रकार को सही ढंग से सेट करना था। यह सही C/C++ header के बजाय C/C++ Compiler पर सेट किया गया था।

+0

मेरे पास एक ही समस्या थी और आपके समाधान ने इसे हल किया !, मुझे लगता है कि जब आप एक .cpp फ़ाइल बनाते हैं और फिर इसे हेडर फ़ाइल में बदलते हैं तो ऐसा होता है .. – Rachmaninoff

1

"सी 32+" के बजाय अपने सी ++ प्रोजेक्ट के प्लेटफार्म को "x64" (या जो भी प्लेटफार्म आप लक्षित कर रहे हैं) में बदलें। यह बिल्ड -> कॉन्फ़िगरेशन प्रबंधक के अंतर्गत विजुअल स्टूडियो में पाया जा सकता है। सूची में अपनी परियोजना पाएं और प्लेटफ़ॉर्म कॉलम बदलें। सभी समाधान विन्यास के लिए यह मत भूलना।

5

यदि आप अपने प्रोजेक्ट में प्रीकंपिल्ड हेडर का उपयोग नहीं करते हैं, तो प्रीकंपील्ड हेडर का उपयोग न करने के लिए स्रोत फ़ाइलों की बनाएं/उपयोग प्रीकंपील्ड हैडर प्रॉपर्टी सेट करें। इस संकलक विकल्प सेट करने के लिए निम्न चरणों का पालन करें:

  • परियोजना के समाधान एक्सप्लोरर फलक में, इस परियोजना का नाम राइट-क्लिक करें, और उसके बाद Properties
  • बाएं फलक में, C/C++ फ़ोल्डर पर क्लिक करें।
  • Precompiled Headers नोड पर क्लिक करें।
  • दाएं फलक में, Create/Use Precompiled Header पर क्लिक करें, और उसके बाद Not Using Precompiled Headers क्लिक करें।
संबंधित मुद्दे

 संबंधित मुद्दे