2012-02-07 16 views
5
I'm getting an "unresolved external symbol "public:__thiscall hijo<int>::hijo<int>(void)" referenced in function_main 

मैंने एक नया प्रोजेक्ट शुरू किया क्योंकि मुझे यह एक और बड़ी परियोजना पर एक ही त्रुटि हो रही थी। त्रुटि तब होती है जब मैं नए कीवर्ड का उपयोग करके स्थान आवंटित करने का प्रयास करता हूं। यदि यह त्रुटि मूर्खतापूर्ण है तो कृपया मुझे क्षमा करें क्योंकि मैंने पिछले महीनों में कुछ भी प्रोग्राम नहीं किया है।टेम्पलेट वर्ग का उपयोग करते समय लिंकर त्रुटि?

/********************file hijo.h******************/ 
#pragma once 
#ifndef hijo_h 
#define hijo_h 

template <class A> 
class hijo 
{ 
public: 
    hijo(void); 
    ~hijo(void); 
}; 
#endif 


    /********************file hijo.cpp***************/ 
    #include "hijo.h" 
#include <iostream> 
using namespace std; 

template <class A> 
hijo<A>::hijo(void) 
{ 
} 
template <class A> 
hijo<A>::~hijo(void) 
{ 
} 
    /*********************at main() function ***************/ 

#include <iostream> 
#include "hijo.h" 

int main(){ 

    hijo<int> *h = new hijo<int>; <---- PROBLEM AT THIS LINE 

    system("pause"); 
    return 0; 
} 

उत्तर

10

सी ++ के संकलन मॉडल में एक विचित्रता के कारण, आप बाहर ज और सीपीपी फ़ाइलें बहुत सफाई से टेम्पलेट कक्षाओं के लिए अलग नहीं कर सकते। विशेष रूप से, किसी भी अनुवाद इकाई (सी ++ स्रोत फ़ाइल) जो टेम्पलेट वर्ग का उपयोग करना चाहता है उसे संपूर्ण टेम्पलेट परिभाषा तक पहुंच प्राप्त करनी है। यह भाषा का एक अजीब quirk है, लेकिन दुर्भाग्य से यह यहाँ रहने के लिए है।

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

#pragma once 
#ifndef hijo_h 
#define hijo_h 

template <class A> 
class hijo 
{ 
public: 
    hijo(void); 
    ~hijo(void); 
}; 

/* * * * Implementation Below This Point * * * */ 

template <class A> 
hijo<A>::hijo(void) 
{ 
} 
template <class A> 
hijo<A>::~hijo(void) 
{ 
} 

#endif 

आशा है कि इससे मदद मिलती है!

+0

"लेकिन दुर्भाग्य से यह यहां रहने के लिए है" - जब तक हम मॉड्यूल प्राप्त नहीं करते। \ * उंगलियों को पार करता है * – Xeo

+0

एक चार्म की तरह काम करता है, बस अपने समाधान के लिए थोड़ा फिक्स करना पड़ा। .h फ़ाइल में कोड जोड़ने के बजाय मैंने .h फ़ाइल के नीचे .cpp फ़ाइल शामिल की है। यह वही परिणाम है जैसे दोनों भाग एक ही फाइल में थे। "hijo.cpp" #ifndef hijo_cpp #define hijo_cpp और नीचे #endif पर ... आपके उत्तर के लिए यू धन्यवाद में ... – HoNgOuRu

+0

होगा 8 अधिक मिनट तक प्रतीक्षा सवाल चिह्नित करने के लिए उत्तर दिया गया – HoNgOuRu

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