2017-06-04 37 views
-5

我有以下代碼:錯誤:「X」不姓模板功能的X型

#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: error: ‘X’ does not name a type
X binary(X x,X y)
transform.cpp: In function ‘int main()’:
transform.cpp:28:19: error: expected primary-expression before template’

以下行出現:

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

爲什麼X名稱的類型unary,但不是binary

+1

而對於'binary'功能,什麼是'X'?該功能不是模板。 –

+1

您需要在本網站上閱讀[*本網頁以瞭解正確的詢問方式*](https://stackoverflow.com/help/asking)。 – Shadi

回答

2

模板中的'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; 
} 
+0

非常感謝..它的工作 –