【问题标题】:error: ‘X’ does not name a type X in template functions错误:“X”没有在模板函数中命名类型 X
【发布时间】:2017-06-04 08:55:25
【问题描述】:

我有以下代码:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

template< typename X>   
X unary(X x)
{
    return x*10;
}

X binary( X x,X y)
{
    return x+y;
}

int main()
{
    vector<int> v1{1,2,3,4,5,6};
    vector<int> v2(v1);

    vector<int>::iterator i;

    for(i=v2.begin();i<v2.end();i++)
        cout<<*i<<endl;

    cout<<"unary "<<unary<int>(2)<<endl;
    cout<<"binary "<<binary<int>(2,7);
}

但是,它无法编译,而是收到以下错误消息:

transform.cpp:12:1: 错误:‘X’没有命名类型
X 二进制(X x,X y)
transform.cpp:在函数“int main()”中:
transform.cpp:28:19: 错误:模板之前的预期主表达式'

出现在下面一行:

cout<<"binary "<< binary<int,int>(2,7);

为什么Xunary 命名一个类型,而不是binary

【问题讨论】:

标签: c++


【解决方案1】:

模板中的'T' 只是函数中使用的类型、类或与之关联的实体的占位符。并且模板参数的作用域以这个实体的作用域结束。

See here: When does a template end?

您必须为binary(X x, X y) 编写另一个模板,如下所示:

template< typename X>   
X unary(X x)
{
  return x*10;
}

template< typename X> 
X binary( X x,X y)
{
    return x+y;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2021-09-21
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    相关资源
    最近更新 更多