使用模板...我的代码有什么问题?

Using templates... What's wrong with my code?

本文关键字:什么 问题 代码 我的      更新时间:2023-10-16

我最近刚刚学习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);
}

这些就是错误:

  1. "szablony.h":|第27行|错误:没有参数列表的模板名称"Klasa"的使用无效|

  2. main.cpp |第16行|错误:调用"Klasa::podaj()"|时没有匹配的函数

  3. main.cpp |第17行|错误:调用"Klasa::podaj()"|时没有匹配的函数

这门课是从2004年开始的,顺便说一句,这可能是一个原因,但即使我在网上看,一切似乎都很好…

提前感谢:)

主要问题是Klasa是一个模板类,但您在将nmax专门化为常规类时使用了它。特别地,Klasa不表示类型,但是例如Klasa<int>表示类型。

因此,要么让函数返回一个模板模板,要么使用Klasa<type>