模板化函数..错误:模板 ID 与任何模板声明都不匹配

发布于 2024-09-27 23:58:52 字数 1256 浏览 1 评论 0原文

我编写了一个函数模板一个显式专用的模板函数,它只接受 3 个参数并计算其中最大的参数并打印它。

专用函数会导致错误,而模板则可以正常工作。 但我想使用 char* 类型

这是我得到的错误=> 错误:模板 ID 'Max<>' for 'void Max(char, char, char)' 与任何模板声明都不匹配

以下是我的代码:

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

I have written a function template and an explicitly specialized templated function which simply takes in 3 arguments and calculates the biggest among them and prints it.

The specialized function is causing an error,whereas the template works fine.
But I want to work with char* type.

This is the error I get=>
error: template-id ‘Max<>’ for ‘void Max(char, char, char)’ does not match any template declaration

Following is my code:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瞎闹 2024-10-04 23:58:53

您需要通过引用获取指针:

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

也就是说,最好使用显式专门化,而只是重载函数:

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

专门化函数模板几乎总是一个坏主意。有关详细信息,请参阅 Herb Sutter 的“为什么不专门化函数模板?”

You need to take the pointers by reference:

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

That said, it would be better not to use an explicit specialization and instead just overload the function:

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

It's almost always a bad idea to specialize function templates. For more, see Herb Sutter's "Why Not Specialize Function Templates?"

伴随着你 2024-10-04 23:58:53

我遇到了同样的问题并使用 typedef 修复了它:

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

I ran into the same problem and fixed it by using typedef:

typedef char * charPtr;
template <>
void Max(charPtr &a, charPtr &b, charPtr &c)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文