2010-05-01 19 views
7

मेरे पास दो कक्षाएं हैं, जिन्हें एक दूसरे से विरासत में मिला है।सी ++ एलएनके2019 व्युत्पन्न कक्षाओं में रचनाकारों और विनाशकों के साथ त्रुटि

Entity.obj: त्रुटि LNK2019: जब मैं संकलन, मैं निम्नलिखित त्रुटियाँ प्राप्त अनसुलझे बाह्य प्रतीक "सार्वजनिक: __thiscall उपयोगिता :: Parsables :: बेस :: बेस (शून्य)" (?? 0Base @ Parsables @ उपयोगिता @@ क्यूएई @ एक्सजेड) फ़ंक्शन में संदर्भित "सार्वजनिक: __thiscall उपयोगिता :: पार्सबेल :: इकाई :: इकाई (शून्य)" (?? 0 एंटिटी @ पार्सबल्स @ उपयोगिता @@ क्यूएई @ एक्सजेड)

Entity.obj : त्रुटि एलएनके201 9: अनसुलझा बाहरी प्रतीक "सार्वजनिक: वर्चुअल __thiscall उपयोगिता :: पार्सबेल :: बेस :: ~ बेस (शून्य)" (?? 1 बेस @ पार्सबल्स @ उपयोगिता @@ यूएई @ एक्सजेड) फ़ंक्शन में संदर्भित "सार्वजनिक: वर्चुअल __thiscall उपयोगिता :: पार्सबल्स :: इकाई :: ~ इकाई (शून्य) "(?? 1 एंटिटी @ पार्सबल्स @ यूटिलिटी @@ यूएई @ एक्सजेड)

डी: \ प्रोग्रामिंग \ परियोजनाओं \ कैफीन \ डीबग \ Caffeine.exe: गंभीर त्रुटि LNK1120: 2 अनसुलझे बाहरी

मैं सच में समझ नहीं क्या हो रहा है .. किसी को भी मैं क्या कर रहा हूँ देख सकते हैं गलत? मैं विज़ुअल सी ++ एक्सप्रेस 2008 का उपयोग कर रहा यहाँ फ़ाइलें हैं ..

"शामिल/उपयोगिता/Parsables/Base.hpp"

#ifndef CAFFEINE_UTILITY_PARSABLES_BASE_HPP 
#define CAFFEINE_UTILITY_PARSABLES_BASE_HPP 

namespace Utility 
{ 
namespace Parsables 
{ 
    class Base 
    { 
    public: 
    Base(void); 
    virtual ~Base(void); 
    }; 
} 
} 

#endif //CAFFEINE_UTILITY_PARSABLES_BASE_HPP 

"src/उपयोगिता/Parsables/Base.cpp "

#include "Utility/Parsables/Base.hpp" 

namespace Utility 
{ 
namespace Parsables 
{ 
    Base::Base(void) 
    { 
    } 

    Base::~Base(void) 
    { 
    } 
} 
} 

" शामिल/उपयोगिता/Parsables/Entity.hpp "

#ifndef CAFFEINE_UTILITY_PARSABLES_ENTITY_HPP 
#define CAFFEINE_UTILITY_PARSABLES_ENTITY_HPP 

#include "Utility/Parsables/Base.hpp" 

namespace Utility 
{ 
namespace Parsables 
{ 
    class Entity : public Base 
    { 
    public: 
    Entity(void); 
    virtual ~Entity(void); 
    }; 
} 
} 

#endif //CAFFEINE_UTILITY_PARSABLES_ENTITY_HPP 

"src/उपयोगिता/Parsables/Entity.cpp"

#include "Utility/Parsables/Entity.hpp" 

namespace Utility 
{ 
namespace Parsables 
{ 
    Entity::Entity(void) 
    { 
    } 

    Entity::~Entity(void) 
    { 
    } 
} 
} 
+0

क्या ये सभी फ़ाइलें प्रोजेक्ट में शामिल हैं? क्या आप उन्हें संकलित देखते हैं? – shoosh

+0

हां, वे सभी शामिल हैं और ठीक संकलित हैं। – BLH

+0

नामस्थानों से छुटकारा पाने का प्रयास करें – shoosh

उत्तर

8

प्रासंगिक बिट यह है:

unresolved external symbol "public: __thiscall Utility::Parsables::Base::Base(void)" 

आप Base::Base और Base::~Base के लिए एक परिभाषा प्रदान करने की जरूरत है। एक घोषणा पर्याप्त नहीं है। यहां तक ​​कि यदि आपके पास किसी भी फ़ंक्शन में कुछ भी करने की ज़रूरत नहीं है, तो आपको एक खाली फ़ंक्शन बॉडी छोड़नी होगी, क्योंकि सी ++ वास्तव में फ़ंक्शन मौजूद होने की आवश्यकता है। सी ++ आपके कन्स्ट्रक्टर और विनाशकों के अंदर वर्चुअल टेबल रखरखाव जैसी चीजें रखता है, इसलिए उन्हें परिभाषित किया जाना चाहिए, भले ही आपको वहां कुछ भी करने की आवश्यकता न हो - सी ++ को वहां चीजें करना है।

क्या आप सुनिश्चित हैं कि बिल्ड में Base.cpp शामिल किया जा रहा है?

+0

मेरी स्रोत फ़ाइलों में उनमें परिभाषाएं हैं, मैंने वर्णन किया है कि मैंने एक खाली फ़ंक्शन बॉडी छोड़ी है। – BLH

+0

@BLH: मेरी आखिरी वाक्य दोबारा पढ़ें :) (मैंने जवाब संपादित किया है भले ही यह उस तरह से दिखाई न दे) –

+0

मैंने अभी कुछ जांच और याद किया है, मेरे पास बेस.cpp नामक दो फाइलें हैं, लेकिन वे अलग-अलग निर्देशिका में हैं । मैं एक संकलन देखता हूं, लेकिन दो नहीं। क्या यह समस्या हो सकती है? – BLH

0

या तो अपने base.cpp संकलित किया गया है नहीं किया जा रहा/जुड़ा हुआ या आप एक गलत वर्तनी है में यह

0

बस इस ठीक उसी त्रुटि आज दृश्य स्टूडियो में 2015 दुर्भाग्य से स्वीकार किए जाते हैं जवाब के रूप में काम किया नहीं था (और साथ का सामना करना पड़ा कई प्रश्नों के उत्तर)। मेरे लिए काम करने वाली चीज बेस क्लास सीपीपी फ़ाइल पर राइट क्लिक करें, बाहर निकालें और फिर इसे फिर से शामिल करें। मुझे लगता है कि फाइल को चारों ओर ले जाने और नाम बदलने के दौरान किसी भी तरह वीएस उलझन में आ गया और इसे चुपचाप इसे संकलित करने से इनकार कर दिया गया, भले ही इसे "प्रोजेक्ट में शामिल" के रूप में चिह्नित किया गया हो या संपत्ति संपादक में सत्य के साथ-साथ समूह में vcproj फ़ाइल में सूचीबद्ध किया गया हो। यह भयानक त्रुटि है और इस पर अच्छा घंटा खर्च कर रहा है।