2013-11-28 32 views
1

我想通過一個'通用集'作爲參數。錯誤傳入集<template T>作爲參數

template<class T> 
class Printer { 
public: 
    static doprint (std::set <T>& ms){ 

     for (std::set::const itr = ms.begin(); itr!= ms.end(); ++itr) 
     { 
      //do processing. e.g. printing 
      cout<< ms.print(); 
     } 
     ms.clear(); 
    } 
}; 

我打電話使用

std::set <classA> setA; //both class A and B have a .print() method 
std::set <classB> setB; 
    // populates A & B 

Printer::doPrint(setA); 
Printer::doPrint(setB); 

的方法,但我收到以下錯誤

error: 'template <class T> class Printer' used without template parameters. 

我如何能解決這個問題的任何想法?

+2

錯誤消息告訴你**完全**問題是什麼。 (怎麼樣'打印機 :: doPrint(setA);'等?) – 2013-11-28 07:31:18

+0

ohh!修復了這個錯誤。我仍然在學習如何使用模板。謝謝。 –

回答

3

因爲模板是對類,你必須明確地調用它,當你調用doPrint:

Printer<classA>::doPrint(setA) ; 

平時要解決這個問題,人們做出的輔助功能,可自行計算出模板參數:

template <class T> 
    void call_doprint(std::set <T>& ms) { Printer<T>::doPrint(ms) ; } 

然後你可以叫:

call_doprint(setA) ; 

這是人們喜歡make_sharedptrmake_pair比調用構造函數更好的原因之一。

+0

很快!謝謝。過去兩個小時我被困住了。 –

+0

沒有問題,我已經不止一次地與此戰鬥過。 – woolstar

0

std :: set是沒有類只是一個模板。打印機也是如此。因此,無論何時您希望將它們用作類型,您都必須提供模板參數來實例化一個類。這意味着std :: set :: const_iterator,打印機和打印機。

相關問題