【发布时间】:2010-08-14 20:51:18
【问题描述】:
我一直在阅读关于 C++0x 的 thisCodeProject 文章,并在 VC2010 中快速尝试了一下。但是我遇到了编译错误,我对问题所在有点茫然。
#include < iostream>
template <typename FirstType, typename SecondType>
auto AddThem(FirstType t1, SecondType t1) -> decltype(t1 + t2)
{
return t1 + t2;
}
int main()
{
auto a = 3.14;
auto b = 3;
auto c = AddThem<decltype(a),decltype(b)>(a,b);
std::cout << c << std::endl;
return 0;
}
导致此错误:
错误 C2086:'FirstType t1':重新定义 1> main.cpp(4): 见“t1”的声明 1>main.cpp(14): 错误 C2780: ''未知类型' AddThem(FirstType)' : 需要 1 个参数 - 提供 2 个 1>
main.cpp(4) : 见声明 'AddThem' 1>main.cpp(14): 致命错误 C1903:无法从先前的恢复 错误;停止编译
感谢您的任何想法。
【问题讨论】:
-
直接调用
AddThem(a, b)即可,推导出模板参数。 -
我想我需要更多的咖啡 - 我显然正在失去它:(谢谢!
-
出于个人喜好,我认为写 auto a = 3.14; 时丢失类型定义并不好。自动 b = 3;恕我直言,我认为 auto 可以很好地猜测长且难以阅读的类型名称,即在模板定义中。
-
我同意。但我只是在玩 C++0x,想看看使用 auto 是什么样的。