使用模板函数C ++通过引用传递

时间:2014-03-16 08:45:42

标签: c++ templates pass-by-reference

我正在尝试创建一个模板函数并通过引用将两个变量传递给它,每个事情听起来都不错但它从未编译过,错误信息是: -

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

我尝试了一小部分代码,它给了我同样的错误,请帮忙吗?

这是代码的一部分,所有其他代码就像这样:

int size , found = -1 ; 

template<class type> Read_Data( type &key , type &arr)
{ 
    cout << " please enter the size of your set \n " ; 
    cin >> size ;
    arr = new type[size]; 

    cout << " please enter the elements of your set : \n " ;
    for (int i = 0 ; i <size ; i ++ )
    {
        cout << " enter element number " << i << ": "  ;  
        cin >> arr[i] ;
    }
    cout << " please enter the key elemente you want to search for : \n " ;
    cin >> key ; 
}

void main(void)
{ 
    int key , arr ; 
    Read_Data (key, arr);

    /*after these function there is two other functions one to search for key 
    in array "arr" and other to print the key on the screen */ 
}

2 个答案:

答案 0 :(得分:1)

您需要在函数Read_Data的声明中指定返回值类型。

一些例子:

template<class type> void Read_Data( type &key , type &arr)
template<class type> int  Read_Data( type &key , type &arr)
template<class type> type Read_Data( type &key , type &arr)

如果您不打算在该函数中返回任何内容,那么第一个示例可能就是您所需要的......

顺便说一下,你还需要:

  • 在功能main中,将int arr更改为int* arr
  • 在功能main中,将Read_Data更改为Read_Data<int>
  • 在功能main中,请在使用完毕后致电delete[] arr
  • 在功能Read_Data中,将type &arr更改为type* &arr

答案 1 :(得分:0)

您只是遗漏了一些东西来编写代码(解决您看到的错误)。

基本上,在int main()中,您需要在实例化模板时指定类型,如:

Read_Data <int> (key, value); 

以便编译器知道您真正想要用什么类型实例化它。

另请注意,数组应为int *类型。因此,在模板化函数中,签名必须更改为:

template<class type> Read_Data( type &key , type* &arr)

这是更正的代码,它不会显示您之前看到的错误:

#include<iostream>  

using namespace std;

int size , found = -1 ; 

template<class type> void Read_Data( type &key , type* &arr)
{ 
    cout << " please enter the size of your set \n " ; 
    cin >> size ;
    arr = new type[size]; 
    cout << " please enter the elements of your set : \n " ;

    for (int i = 0 ; i <size ; i ++ )
    {   
        cout << " enter element number " << i << ": "  ;   
        cin >> arr[i] ;
    }   

    cout << " please enter the key elemente you want to search for : \n " ;
    cin >> key;                                                                                                                                         
}

int main()
{   
    int key;
    int * arr;
    Read_Data<int> (key, arr);

    /* after these function there is two other functions one to search for key 
     * in array "arr" and other to print the key on the screen 
     */ 
}