微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

U 未命名类型 - 模板编译错误

如何解决U 未命名类型 - 模板编译错误

这是我的简单程序。我尝试强制使用 static_cast,以便编译器知道 U 只是 int。但是,模板仍然无法实例化我的函数 Add 的 int 版本。

将来,我想扩展此模板,以便 UV 属于不同类型,而我的程序仍然可以运行。

然而,目前,即使是相同的类型也不起作用。我在这里错过了什么?

编译错误的原因是什么?

#include <iostream>
using namespace std;

template <typename U>
class Addable
{
    U x;
public:
    Addable(U val) : x{ val } { cout << "Constructor called" << endl; }
    template <typename T>
    U add(T y);
};

U Addable::add(T y)
{
    x += y;
    return x;
}

int main()
{
    Addable<int> A{ 10 };
    int x = A.add(static_cast<int>(10));
    cout << x;
    return 0;
}

解决方法

您的模板成员函数定义错误。 定义模板类的模板成员函数时,需要指定两个模板参数如下:

template <typename U>
template <typename T>
U Addable<U>::add(T y)
{
    x += y;
    return x;
}

live demo

,

为了在模板类之外定义模板函数。正确的应该是

template <typename U> template <typename T>
U Addable<U>::add(T y)
{
   x += y;
   return x;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。