2015-04-05 181 views
2

我有這樣的代碼C++與指針參數模板函數

template <class N> 
inline N swap(N a, N b) { 
    int c = *a; 
    *a = *b; 
    *b = c; 
} 

這個功能我得到這個錯誤:error: 'N' does not name a type Error compiling.

這是我的正常功能。

inline void swap(int *a, int *b) { 
    int c = *a; 
    *a = *b; 
    *b = c; 
} 

我的問題是我需要使用此函數與無符號和正常的整數。 是否可以使用模板來做到這一點。

+0

爲什麼不使用'std :: swap'? – chris 2015-04-05 18:42:41

+0

因爲我使用的是arduino,所以我想知道它是如何工作的。 – 2015-04-05 18:43:05

+0

如果模板類型「T」不是整數?或者參數不是指針? – 2015-04-05 18:46:48

回答

3

我想你想是這樣的:從int c指針的

template<typename T> 
inline void swap(T* a, T* b) // Use T* if you're expecting pointers 
     ^^^^ // Notice the return type 
{ 
    T c = *a; 
    *a = *b; 
    *b = c; 
} 
+0

「int」看起來不合適。 – molbdnilo 2015-04-05 18:46:05

+0

@molbdnilo是的,我從他們的實現中複製了它...我將修復它 – 2015-04-05 18:46:40

+0

這是Arduino IDE的錯誤,我必須聲明'template inline void swap(T * a,T * b);'功能。但是,謝謝。 – 2015-04-05 18:56:14

0

更改聲明N* c,因爲它可能會採取另一種數據類型作爲參數,此外,你不能把值一個正常變量中的指針。