【发布时间】:2013-12-09 13:39:27
【问题描述】:
我正在尝试完成我的一个学校项目,但我遇到了问题。我正在尝试在我的工作中使用模板,但似乎我并不真正了解如何做到这一点。这是我的代码的一部分:
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
提前致谢!
【问题讨论】:
-
通用模板定义必须与其声明位于同一文件中。而且没有办法从返回类型中推断出模板参数。
-
那么这样的模板就没有办法使用了吗?
-
我能给你的最好的答案是发布的答案,但除非你想要链接器错误,否则你仍然需要移动定义。
-
题外话:匈牙利命名听起来很有趣
标签: c++ function class templates