के अंदर स्थिर सदस्य फ़ंक्शन क्लास टेम्पलेट के अंदर परिभाषित स्थिर सदस्य फ़ंक्शन तक पहुंचने के लिए संघर्ष कर रहा हूं। हेडर फाइल TemplateTest.h में मैं के रूप में प्राथमिक वर्ग खाका परिभाषित:क्लास टेम्पलेट विशेषज्ञता
#include<iostream>
template<class T, class U>
struct TemplateTest
{
public:
void static invoke();
/*{
std::cout << "Should not be called" << std::endl;
}*/
};
तो स्रोत फ़ाइल TemplateTester.cpp मैं एक विशेषज्ञता डाल:
#include "TemplateTest.h"
template<>
struct TemplateTest<int, bool>
{
static void invoke()
{
std::cout << "invoke<int, bool>" << std::endl;
}
};
template struct TemplateTest<int, bool>; //instantiate to resolve linker issue
मैं स्पष्ट रूप से ऐसा लिंकर निराकरण के साथ वर्ग instantiated सही ढंग से।
ड्राइवर driver.cpp में:
include "TemplateTest.h"
int main()
{
TemplateTest<int, bool>::invoke();
return 0;
}
जब मैं जी के साथ TemplateTest.cpp संकलन ++ यह वस्तु फ़ाइल ठीक से उत्पन्न करता है लेकिन जब मैं ड्राइवर वर्ग से लिंक करने की कोशिश यह मेरी लिंकर त्रुटि "देता है `टेम्पलेटटेस्ट :: invoke()"
के लिए अनिर्धारित संदर्भ मैं this one जैसे अन्य संबंधित पोस्टिंग के माध्यम से गया लेकिन मैं फ़ंक्शन टेम्पलेट तक पहुंचने का प्रयास नहीं कर रहा हूं।
कोई सुराग बहुत सराहना की है।
कार्यान्वयन को हेडर फ़ाइल में ले जाएं। टेम्पलेट के कार्यान्वयन को उन सभी टीयू के लिए दृश्यमान होने की आवश्यकता है। –