2012-05-02 166 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之後的一段時間...仍然需要學習很多:) –

相關問題