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

时间:2015-02-10 22:57:04

标签: c++ templates

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

}

这是&#34; szablony.h&#34;:

#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. &#34; szablony.h&#34;:|第27行|错误:无效使用模板名称&#39; Klasa&#39;没有参数列表|

  2. main.cpp |第16行|错误:没有匹配函数来调用&#39; Klasa :: podaj()&#39; |

  3. main.cpp |第17行|错误:没有匹配函数来调用&#39; Klasa :: podaj()&#39; |

  4. 这个课程是从2004年开始的,这可能是一个原因,但即使我在互联网上看,一切似乎还不错......

    提前谢谢你:)

1 个答案:

答案 0 :(得分:1)

主要问题是Klasa是一个模板类,但您在nmax的特化作为常规类时使用它。特别是,Klasa不代表某种类型,例如Klasa<int>确实如此。

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