gpt4 book ai didi

c++ - 编译错误 : could not deduce template argument

转载 作者:行者123 更新时间:2023-11-28 03:03:36 25 4
gpt4 key购买 nike

我正试图完成我的一个学校项目,但我遇到了一个问题。我正在尝试在我的工作中使用模板,但似乎我并不真正了解该怎么做。这是我的代码的一部分:

主要.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);

模板参数不依赖于函数参数类型。因此,编译器不可能为该函数推导模板参数。 (编译器无法从函数返回类型中推断出模板参数。)

调用此函数时,您必须显式指定模板参数,如

diakokBeolvasasa<double>(kepzes);

在上面的示例中,使用您希望 szak 代替 double 的任何类型。

您的 diakokBeolvasasa 函数还有另一个潜在问题。它似乎返回 I33G22 类型的结果。如果这些类型不相关,那么......好吧......不能那样做。在 C++ 中,不存在可以返回“不可预测”类型的函数。模板在这里帮不了你。那么,I33G22 是否相关?

第二个错误只是第一个错误的产物。

附言正如评论中所指出的,您不应将模板定义放入 .cpp 文件中。模板必须在头文件中定义。

关于c++ - 编译错误 : could not deduce template argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20182737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com