2016-02-20 64 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

好吧!我解决它,谢谢! –

相关问题