【问题标题】:C++0x auto, decltype and template functionsC++0x 自动、decltype 和模板函数
【发布时间】: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 是什么样的。

标签: c++ c++11


【解决方案1】:

这是因为您将两个参数都命名为t1。你可能打算给第二个打电话t2

【讨论】:

  • 不开玩笑。 :( 有点尴尬,我错过了!
  • @Chris:只怪编译器没有让它变得明显;)
  • @Matthieu M. 所说的。编译器错误真的可以更清楚。
【解决方案2】:

那是我的错。您应该报告 CodeProject 本身。偶然发现了这个话题。 是的,它们应该是两个不同的名称。

现在,我还需要做一项更改!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2011-07-28
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多