Ich habe Probleme, statische Member-Funktion innerhalb der Klassenvorlage definiert zugreifen. Im TemplateTest.h Header-Datei definiert ich die primäre Klasse Template als:statische Member-Funktion innerhalb der Klassenvorlage Spezialisierung
#include<iostream>
template<class T, class U>
struct TemplateTest
{
public:
void static invoke();
/*{
std::cout << "Should not be called" << std::endl;
}*/
};
Dann Quelle TemplateTester.cpp Datei ich eine Spezialisierung setzen:
#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
ich die Klasse explizit mit so Linker Entschlüssen instanziiert korrekt.
Im Treiber driver.cpp:
include "TemplateTest.h"
int main()
{
TemplateTest<int, bool>::invoke();
return 0;
}
Wenn ich die TemplateTest.cpp mit g ++ kompiliert generiert es die Objektdatei korrekt, aber wenn ich versuche, es dem Fahrer Klasse zu verknüpfen gibt es meine Linker-Fehler " undefinierter Verweis auf `TemplateTest :: invoke()"
Ich ging durch andere verwandte Postings wie this one, aber ich versuche nicht auf eine Funktionsvorlage zuzugreifen.
Jeder Hinweis wird sehr geschätzt.
Verschieben Sie die Implementierung in die Headerdatei. Die Implementierungen der Vorlage müssen für alle TU sichtbar sein, die sie verwenden. –