2015-02-10 55 views
0

我刚刚在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行|错误:无效使用o f模板名'Klasa'没有参数列表|

  2. main.cpp | line 16 | error:没有匹配函数调用'Klasa :: podaj()'|

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

这当然是从2004年顺便说一句,这可能是一个原因,但即使是当我看到在互联网上,似乎一切都OK了...

预先感谢您:)

+2

不要把'使用namespace'条款中的头文件。 – PaulMcKenzie 2015-02-10 22:59:43

+0

在模板类中放置嵌套模板'template '(再次请不要习惯使用'namespace std;') – 2015-02-10 23:02:50

回答

1

主要问题是Klasa是一个模板类,但在nmax的专业化中作为常规类使用它。具体而言,Klasa不代表一种类型,但例如, Klasa<int>呢。

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

相关问题