2016-04-26 2 views
2

ich diesen Fehler:kann nicht explizit spezialisiert werden

Severity Code Description Project File Line Suppression State Error C2910 'addingStuff::addingStuffFunc': cannot be explicitly specialized BuckysTemplateSpecialization c:\users\amanuel\documents\visual studio 2015\projects\buckystemplatespecialization\buckystemplatespecializ

Wenn ich versuche, diesen Code auszuführen:

#include<iostream> 
#include<string> 

template<class F, class S> 
class addingStuff { 
public: 
    addingStuff(F fCons, S sCons) : f(fCons), s(sCons){} 

    F addingStuffFunc(); 

private: 
    F f; S s; 
}; 

template<class F, class S> 
F addingStuff<F, S>::addingStuffFunc() { 
    return(f + s); 
} 

template<> 
class addingStuff<std::string , std::string>{ 
public: 
    addingStuff(std::string sConst, std::string s2Const):s(sConst), s2(s2Const){} 
    std::string addingStuffFunc(); 
private: 
    std::string s, s2; 
}; 

template<> 
std::string addingStuff<std::string, std::string>::addingStuffFunc() { 
    return "Sorry.. Adding strings is Illegal!!"; 
} 

int main() { 
    addingStuff<std::string, std::string> exampleStuff("Hello " , "World"); 
    std::cout << exampleStuff.addingStuffFunc() << std::endl; 
} 

No Clue Warum ..

Antwort

6

Sie nur wollen:

std::string addingStuff<std::string, std::string>::addingStuffFunc() { 
    return "Sorry.. Adding strings is Illegal!!"; 
} 

Die zusätzliche template <> wird interp reted als Vorlage-ID für die Member-Funktion, und der Code wird als explizite Spezialisierung davon für <> interpretiert. Aber addingStuffFunc ist keine Funktionsvorlage, daher der Fehler.

+1

Vielen Dank, es hat funktioniert! Ich akzeptiere den Verstärker in 5 Minuten (minumum Zeit) .. Aber noch eine Frage! Warum mache ich Vorlage für die erste Funktion, und ich lasse es einfach für die zweite Funktion heraus? Liegt es daran, dass es sich auf einen bestimmten Datentyp spezialisiert hat? Danke – amanuel2

+1

@Dasafds Ziemlich viel. – Barry