Funktion Vorlage Spezialisierung kompilieren Fehler
##A.hh
template<class T> void func(T t) {}
template<> void func<int>(int t) {}
void func2();
##A.cpp
void func2() {}
##main.cpp
func("hello");
func(int());
Den Fehler bekomme ich: error LNK2005: "void __cdecl func(int)" (??$func@H@@YAXH@Z) bereits in A. obj,
eine oder mehrere multiplizieren definierte Symbole gefunden
Ist eine Funktion, template-Spezialisierung behandelt Sie nicht als normale Funktion Vorlage? Wie es aussieht, wird es in der Ziel-Datei für A.
- Was bedeutet
func2
haben zu tun mit es? - Aus deiner Fehlermeldung, ich nehme an, Sie verwenden VC. Ihr Programm funktioniert gut für mich auf VS2005
- So hatte ich etwas, um in die A.cpp Datei
- Ich benutze visual studio 2010
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als
template<> void func<int>(int t) {}
ist eine Funktion, überlastung und nicht als eine Funktion Vorlage (D. H., alle Arten sind bekannt, auf der Punkt-definition, so ist es nicht mehr eine Vorlage), muss es markiert werden, wieinline
oder definiert .cpp-Datei zu vermeiden, mehrere definition-Fehler, wie mit jeder anderen Funktion definition.Das problem ist wie folgt: full-template-Spezialisierung ist nicht mehr eine Vorlage, es ist mehr wie ein normalen Funktion. So sollten Sie entsprechend handeln:
entweder definition von
func<int>()
im cpp-Dateimachen oder die inline -