[英]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.