【问题标题】:C++ passing template class to void functionC++ 将模板类传递给 void 函数
【发布时间】:2016-06-01 19:10:33
【问题描述】:

我想创建一个类调用 Array 并将对象 arr 和 arr1 传递给一个名为“fun”的函数。但是我的编译器告诉我,它在“&”标记之前需要primary-expression。我错过了什么?

.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
}

【问题讨论】:

  • 您可以将 arr 和 arr1 传递给函数,对吗?无需重新声明它们是数组。

标签: c++ function class templates


【解决方案1】:
fun(Array<double, 5>& arr,Array<double, 5>& arr1,i);

应该是

fun(arr,arr1,i);

您的错误是您错误地传递了数组。

【讨论】:

  • 这是我最初的想法,但如果我使用 fun(arr,arr1,i);它说没有匹配函数调用 fun(Array&,Array,int&)
  • 在您的函数声明中,您已声明两个数组应具有相同的类型。当您尝试传入一个带有 double 的数组和另一个带有 bool 的数组时,bool 与 double 的类型不同。如果你希望能够传入两个不同类型的数组,你应该声明两个不同的模板。
猜你喜欢
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多