如何解决U 未命名类型 - 模板编译错误
这是我的简单程序。我尝试强制使用 static_cast
,以便编译器知道 U
只是 int
。但是,模板仍然无法实例化我的函数 Add
的 int 版本。
将来,我想扩展此模板,以便 U
和 V
属于不同类型,而我的程序仍然可以运行。
然而,目前,即使是相同的类型也不起作用。我在这里错过了什么?
编译错误的原因是什么?
#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;
}
,
为了在模板类之外定义模板函数。正确的应该是
template <typename U> template <typename T>
U Addable<U>::add(T y)
{
x += y;
return x;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。