[英]Compile error: could not deduce template argument
我正在努力完成我的學校項目,但我遇到了一個問題。 我正在嘗試在我的工作中使用模板,但似乎我真的不明白該怎么做。 這是我的代碼的一部分:
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
提前致謝!
為了使編譯器推導出模板參數,這些模板參數必須依賴於函數參數類型。 在你的情況下
template <class szak>
szak diakokBeolvasasa(char);
template參數不依賴於函數參數類型。 因此,編譯器無法推導出此函數的模板參數。 (編譯器無法從函數返回類型推導出模板參數。)
調用此函數時,您必須明確指定模板參數,如
diakokBeolvasasa<double>(kepzes);
在上面的例子中,使用你想要的szak
代替double
任何類型。
您的diakokBeolvasasa
功能還有另一個潛在問題。 它似乎返回I33
或G22
類型的結果。 如果這些類型不相關,那么......好吧......不能這樣做。 沒有函數可以在C ++中返回“不可預測”類型。 模板不會幫助你。 那么, I33
或G22
以某種方式相關?
第二個錯誤只是第一個錯誤的產物。
PS正如評論中指出的那樣,您不應將模板定義放入.cpp
文件中。 必須在頭文件中定義模板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.