我最近是在学习C ++模板。但是,即使我按照自己的方式做所有事情,也遇到了3个错误。
这是main.cpp:
#include <iostream>
#include "szablony.h"
using namespace std;
int main()
{
cout << nmax<int>(55,402) << endl;
Klasa<double> a1;
a1.ustaw(25.54);
Klasa<double> a2;
a2.ustaw(44.55);
cout << a1.podaj() << " :max: " << a2.podaj() << " = " <<
nmax<Klasa>(a1.podaj(),a2.podaj()) << endl;
}
这是“ szablony.h”:
#include <iostream>
using namespace std;
template <typename T> class Klasa
{
T wartosc;
public:
template <typename U> T podaj()
{
return (this -> wartosc);
}
template <typename U> void ustaw(U war)
{
wartosc=war;
}
};
template <typename T, typename T1, typename T2> T nmax(T1 n1, T2 n2)
{
return (n1 > n2 ? n1 : n2);
}
template <> Klasa nmax<Klasa>(Klasa n1, Klasa n2)
{
return (n1.podaj() > n2.podaj() ? n1 : n2);
}
因此,这些是错误:
“ szablony.h”:|第27行|错误:模板名称'Klasa'的无效使用,而没有参数列表|
main.cpp |第16行|错误:没有匹配的函数来调用'Klasa :: podaj()'|
main.cpp |第17行|错误:没有匹配的函数来调用'Klasa :: podaj()'|
这门课程来自2004年顺便说一句,这可能是一个原因,但是即使我在互联网上看,一切似乎都还不错。
先感谢您 :)
最佳答案
主要问题是Klasa
是模板类,但是在nmax
的专业化中将其用作常规类。特别地,Klasa
不代表类型,而是例如。 Klasa<int>
可以。
因此,要么使您的函数返回模板模板,要么使用Klasa<type>
关于c++ - 使用模板…我的代码有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28443499/