2016-02-20 60 views
0

我想創建一個類調用Array並將對象arr和arr1傳遞給一個名爲「fun」的函數。但我的編譯器告訴我,這 「&」 令牌」。我錯過了什麼?C++將模板類傳遞給void函數

.h文件中

#ifndef ARRAY_H_INCLUDED 
#define ARRAY_H_INCLUDED 

template <typename T, int SIZE> 
class Array 
{ 
    T values[SIZE]; 
}; 

template <typename T, int SIZE> 
void fun (const Array<T, SIZE>& a,const Array<T, SIZE>& a1,int index) 
{ 
} 

#endif // ARRAY_H_INCLUDED 


template <typename T, int SIZE> 
void fun (const StaticArray<T, SIZE>& a,const StaticArray<T, SIZE>& a1,int index) 
{ 
} 

.CPP

#include <iostream> 
using namespace std; 

#include "Array.h" 

template <typename T, int SIZE> 
void fun (const Array<T, SIZE>&,const Array<T, SIZE>&,int); 

int main() 
{ 
    int i=-1; 
    Array<double, 5> arr; 
    Array<bool, 5> arr1; 
    fun(Array<double, 5>& arr,Array<double, 5>& arr1,i); //error expected primary-expression before '&' token 
} 
+0

你可以將arr和arr1傳遞給函數嗎?不需要重新聲明他們是陣列。 – NickLamp

回答

1
fun(Array<double, 5>& arr,Array<double, 5>& arr1,i); 

前應預期主表達式be

fun(arr,arr1,i); 

你的錯誤是你錯誤地傳遞了數組。

+0

這是我最初的想法,但如果我使用樂趣(arr,arr1,i);它表示沒有用於調用fun的匹配函數(Array &,Array ,int&) –

+0

在您的函數聲明中,您已聲明兩個數組應具有相同的類型。當你嘗試傳遞一個帶有bool的double和另一個數組的數組時,bool與double的類型不同。如果你想能夠傳入兩個不同類型的數組,你應該聲明兩個不同的模板。 – NickLamp

+0

好吧!我解決它,謝謝! –

相關問題