2012-04-19 94 views
-1

我試着在下面的代碼中使用模板,但是我對主函數的第一行有問題!使用C++模板

{ 
    #include <iostream> 
    using namespace std; 
    template <class T> 
    struct node 
    { 
     T inf; 
     node<T> * next; 
}; 
template <class S> 
class String 
{ 
    private : 
      int Slength; 
      node<S> * SS; 
    public : 
     void get_String() 
     { 
       SS = new node<S>; 
       SS -> next = NULL; 
       node<S> * now = SS; 
       char input; 
       while(input = getchar()) 
       { 
          if((input =='\n') || (input == ' ') || (input == '\t')) 
            break; 
          now -> inf = input; 
          now -> next = new node<S>; 
          now = now -> next; 
          now -> next = NULL; 
          ++Slength; 
       } 
     } 
     void show() 
     { 
       node<S> * now = SS; 
       while(now -> next != NULL) 
       { 
         cout << now -> inf ; 
         now = now -> next; 
       } 
       cout << endl; 
     } 
}; 
int main() 
{ 
String a; 
a.get_String(); 
a.show(); 
cout << char(0) << " " << int(' ') << " " <<endl; 
system("pause"); 
return 0; 
} 

我有加入後

<char> 

解決了這個問題! 有沒有其他好的和有效的方法。 您是否知道任何可靠且可讀的模板參考?

+2

爲什麼有''{在代碼的開始? – talnicolas 2012-04-19 14:38:53

+0

當你實例化一個類模板時,你需要提供一個參數列表。如果你有'template class String ...',你可以使用'String <> a;',但即使所有模板參數都有默認值,你需要包含尖括號。順便說一句,字符串作爲鏈接的字符列表將是*可怕的*效率低下(對於實際數據的每個字節至少指出4個字節的指針)。由於您動態分配節點,因此可能比這更糟糕 - 通常每個節點最少爲16或32個字節。 – 2012-04-19 14:44:07

+0

@talnicolas:嗯......你有時會在[cint](http://en.wikipedia.org/wiki/CINT)腳本的開頭看到交互式調用的腳本,但在這種情況下,不需要'#include'像'iostream'這樣的標準頭文件。 – dmckee 2012-04-19 15:07:07

回答

4

由於String是一個模板類,它應該是:

String<char> a;