簡體   English   中英

使用模板…我的代碼有什么問題?

[英]Using templates… What's wrong with my code?

我最近是在學習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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM