【问题标题】:template <typename p> is not giving error but and template <class p> is giving error [duplicate]模板 <typename p> 没有给出错误,但是模板 <class p> 给出了错误 [重复]
【发布时间】:2018-07-02 00:58:57
【问题描述】:

在我的程序中使用 template &lt;typename p&gt; 时,它没有给出任何编译错误,但我使用 template &lt;class p&gt; 在传递两个不同类型的向量时给出错误。

template <class p>

getvector(std::vector<p>&vec)
{
// my operation
}

这是接收向量的函数,我使用template &lt;typename p&gt; 它没有给出编译错误。任何人都可以解释与template &lt;typename p &gt;不同的原因吗?

【问题讨论】:

  • 在这种情况下,typenameclass 没有区别。您的代码应该通过编译。您可以提供错误消息的更多详细信息。
  • 在这两种情况下,函数都需要指定返回类型。试试template &lt;typename p&gt; void getvector(...) { ... }

标签: c++


【解决方案1】:

typename 和函数 template declaration 中的 class 之间没有区别。声明模板参数时,它们的含义相同。你的函数需要一个返回类型:

template <class p>
std::vector<p> getvector(std::vector<p> &vec)
{
    // your code
    return vec;
}

等同于:

template <typename p>
std::vector<p> getvector(std::vector<p> &vec)
{
    // your code
    return vec;
}

如果您不想返回简单的void 函数,则为:

template <typename p> // or template <class p>
void getvector(std::vector<p> &vec)
{
    std::cout << vec[0]; // your code here
}

【讨论】:

    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 2014-02-13
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多