我正在努力完成我的学校项目,但我遇到了一个问题。我正在尝试在我的工作中使用模板,但似乎我真的不明白该怎么做。这是我的代码的一部分:
的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
提前致谢!
答案 0 :(得分:2)
为了使编译器推导出模板参数,这些模板参数必须依赖于函数参数类型。在你的情况下
template <class szak>
szak diakokBeolvasasa(char);
模板参数不依赖于函数参数类型。因此,编译器无法推导出此函数的模板参数。 (编译器不能从函数返回类型中推导出模板参数。)
调用此函数时,您必须明确指定模板参数,如
diakokBeolvasasa<double>(kepzes);
在上面的示例中,使用您希望szak
代替double
的任何类型。
您的diakokBeolvasasa
功能还有另一个潜在问题。它似乎返回I33
或G22
类型的结果。如果这些类型不相关,那么......好吧......不能这样做。没有函数可以在C ++中返回“不可预测”类型。模板不会帮助你。那么,I33
或G22
是否以某种方式相关?
第二个错误只是第一个错误的产物。
P.S。正如评论中所述,您不应将模板定义放入.cpp
文件中。必须在头文件中定义模板。