我正在嘗試完成我的一個學校項目,但遇到了問題。我正在嘗試在我的工作中使用模板,但似乎我並不真正瞭解如何做到這一點。這裏,我的代碼部分:編譯錯誤:無法推斷模板參數
的main.cpp
#include "stdafx.h"
#include "Osztaly.h"
#include "Fuggvenyek.h"
#include <string>
#include <iostream>
int main(){
char kepzes = setKepzes();
//diakokBeolvasasa(kepzes);
diakokKiirasa(kepzes, diakokBeolvasasa(kepzes));
return 0;
}
Fuggvenyek.h
#ifndef FUGGVENYEK_H
#define FUGGVENYEK_H
char setKepzes();
template <class szak>
szak diakokBeolvasasa(char);
template <class szak>
void diakokKiirasa(char, szak);
#endif
所以我想這取決於if語句傳回不同類型的值。 DiakokKiirasa函數然後應該接受它作爲第二個參數,並用它來寫出一些其他的東西。
Fuggvenyek.cpp
#include "Fuggvenyek.h"
#include "Osztaly.h"
using namespace std;
char setKepzes(){
char kepzes;
cout << "A beolvasando szemely kivalasztott kepzese:\n i - informatikus"
<< "g - gepesz\n>> ";
cin >> kepzes;
return kepzes;
}
template <class szak>
szak diakokBeolvasasa(char kepzes){
I33 informatikusok;
G22 gepeszek;
//ha a kepzese informatikus
if (kepzes == 'i'){
informatikusok.setDiakokSzama();
informatikusok.setDiakAdatok();
return informatikusok;
}
//ha a kepzese gepesz
else if (kepzes == 'g'){
gepeszek.setDiakokSzama();
gepeszek.setDiakAdatok();
return gepeszek;
}
}
template <class szak>
void diakokKiirasa(char kepzes, szak diakok){
diakok.getDiakAdatok();
}
我的編譯錯誤:
Error 1 error C2783: 'szak diakokBeolvasasa(char)' : could not deduce template argument for 'szak' d:\programming\c++\cppproject\cppproject\main.cpp 10 1 CppProject
Error 2 error C2780: 'void diakokKiirasa(char,szak)' : expects 2 arguments - 1 provided d:\programming\c++\cppproject\cppproject\main.cpp 10 1 CppProject
提前感謝!
通用模板定義必須與其聲明位於同一個文件中。而且無法從返回類型推斷出模板參數。 – chris
那麼有沒有辦法使用這樣的模板? – Grobi
我可以給你的最好的答案是已發佈的,但是除非你想要鏈接器錯誤,否則你仍然需要移動定義。 – chris