2012-05-02 165 views
0

我在通过非模板函数传递模板函数的参数时遇到了一些问题。将参数从非模板传递给模板函数?

让我们supose我有这样的:

template <class T> 
void A(Array <T> &A) { 
    cout << "here"; 
} 


void menu(Array<myType>& fooList) { // my type specified class type, created by me. 
    cout << "enter option "; 
    cin >> a; 

    switch { 
     case 1: A(fooList); break; 
    } 
} 

希望的例子是非常明显的。这是否可能?我可以将参数从非模板函数传递给模板函数吗?

编辑: - 我试图建立原型的实际代码没有帮助。

domain.h

template <class T> 
void printAll(Array <T> &DBst, Array <T> &DBas){ 
    for(int i=0; i<DBst.lenght; i++){ 
     DBst.M[i].printStudent(); 
     std::cout<<" ___ "; 
     DBas.M[i].printAssgn(); 
     std::cout<<std::endl; 
    } 
} 

或者Controller.h

template <class T> 
void _printAll(Array <T> &DB1, Array <T> &DB2){ 
    cout<<"List of students with their Assignment!"<<endl; 
    printAll(DB1, DB2); 
    cout<<"done!"<<endl; 
} 

menu.cpp

void Menu::mainMenu(Array <Student> &DBst,Array <Assignment> &DBas){ 
showMainMenu(); 
int ret = Menu::intInputHandler(); 

while(ret){ 
    switch(ret){ 
    case 1:studentMenu(DBst,DBas);break; 
    case 2:assignmentMenu(DBst,DBas);break; 
    case 3:statsMenu(DBst,DBas);break; 
    case 4:_printAll(DBst,DBas);break; //// ERROR *** 
    case 0:/*exit*/;break; 
    default:cout<<"Wrong option selected!";break; 
    } 
    } 

    } 

menu.h

class Menu{ 

public: 
    void showMainMenu(); 
    void showStudentMenu(); 
    void showAssignmentMenu(); 
    void showStatisticsMenu(); 
    string stringInputHandler(); 
    int intInputHandler(); 
    void mainMenu(Array <Student> &,Array <Assignment> &); 
    void studentMenu(Array <Student> &,Array <Assignment> &); 
    void assignmentMenu(Array <Student> &,Array <Assignment> &); 
    void statsMenu(Array <Student> &,Array <Assignment> &); 

};

*..\Menu.cpp:90:29: error: no matching function for call to '_printAll(Array<Student>&, Array<Assignment>&)'

+3

什么是你的代码错误的,是什么? –

+0

以及我不能设法通过我的功能(tempalte)在菜单功能的权利... –

+2

你会得到什么错误? – chris

回答

5

嗯,你_printAll(DBst,DBas);两种不同类型的数组;和_printAll只能取两个相同类型的数组。您需要定义与

template <class T1, class T2> 
void printAll(Array <T1> &DBst, Array <T2> &DBas) 

的功能和相应的_printAll

+0

感谢一大堆,它现在是有道理的......这是自从我用C++开始使用tempaltes之后的一段时间...仍然需要学习很多:) –

相关问题