簡體   English   中英

模板化函數..錯誤:template-id與任何模板聲明都不匹配

[英]Templated Functions.. ERROR: template-id does not match any template declaration

我編寫了一個函數模板一個顯式專用的模板化函數 ,它只需要3個參數並計算其中最大的參數並打印出來。

專用函數導致錯誤,而模板工作正常。 但我想使用char *類型

這是我得到的錯誤=> error: template-id 'Max<>' for 'void Max(char, char, char)' does not match any template declaration

以下是我的代碼:

    template <typename T>
    void Max(T& a,T& b,T& c)
    {
            if(a > b && a >> c)
            {
                    cout << "Max: " << a << endl;
            }
            else if(b > c && b > a)
            {
                    cout << "Max: " << b << endl;
            }
            else
            {
                    cout << "Max: " << c << endl;
            }
    }

    template <>
    void Max(char* a,char* b,char* c)
    {
            if(strcmp(a,b) > 0 )
            {
                    cout << "Max: " << a << endl;
            }
            else if(strcmp(b,c) > 0)
            {
                    cout << "Max: " << b << endl;
            }
            else
            {
                    cout << "Max: " << b << endl;
            }
}

您需要通過引用獲取指針:

template <> 
void Max(char*& a,char*& b,char*& c) 

也就是說,最好不要使用顯式特化,而只是重載函數:

void Max(char* a, char* b, char* c)

專門化功能模板幾乎總是一個壞主意。 有關更多信息,請參閱Herb Sutter的“為什么不專業化功能模板?”

我遇到了同樣的問題,並使用typedef修復它:

typedef char * charPtr;
template <>
void Max(charPtr &a, charPtr &b, charPtr &c)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM