2016-04-26 37 views
2

我得到這個錯誤:當我嘗試運行此代碼不能顯式專門

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

#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; 
} 

不知道爲什麼..

回答

6

你只是想:

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

額外template <>獲得interp reted作爲成員函數的模板標識,代碼被解釋爲<>的明確標準。但是addingStuffFunc不是函數模板,因此是錯誤。

+1

非常感謝它!我會在5分鐘(最小時間)接受安納塞爾。但還有一個問題!爲什麼我會爲第一個函數做模板,並且我只是讓它出現在第二個函數中?這是因爲它實際上專門針對特定的數據類型嗎? Thankyou – amanuel2

+1

@Dsafds非常多。 – Barry