2016-04-26 15 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メンバー関数のテンプレートIDとして返され、コードは<>の明示的な専門化として解釈されます。しかしaddingStuffFuncは関数テンプレートではないため、エラーです。

+1

ありがとうございました!病気は5分(minumum時間)でanwserを受け入れる..しかし、もう1つの質問!なぜ私はテンプレートを最初の関数として扱うのですか?実際に特定のデータ型に特化されているからですか?ありがとう – amanuel2

+1

@Dsafdsかなり。 – Barry