2012-04-19 10 views
-1

私は次のコードでテンプレートを使用しようとしましたが、私はmain関数の最初の行に問題があります!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> 

を追加することで解決される問題を持っています! 他にも効果的な方法がありますか? テンプレートの信頼性と読みやすい参照がありますか? String以来

+2

なぜ '{'は、コードの先頭にあるのでしょうか? – talnicolas

+0

クラステンプレートをインスタンス化するときは、引数リストを指定する必要があります。 'template class String ...'があれば 'String <> a;'を使うことができますが、すべてのテンプレート引数にデフォルトを指定していても、角括弧。ところで、リンクされた文字のリストとしての文字列は、恐ろしく非効率的になります(実際のデータの各バイトに対して少なくとも4バイトのポインタが必要です)。ノードを動的に割り当てるので、それはおそらくそれよりも悪くなります。通常、ノードあたり最低でも16または32バイトです。 –

+0

@タルニコラス:うーん...あなたは時には[cint](http://en.wikipedia.org/wiki/CINT)スクリプトの対話的に呼び出されることを意図しているが、その場合は、 'iostream'のような標準ヘッダをインクルードする必要があります。 – dmckee

答えて

4

はテンプレートクラスで、それは次のようになります。

String<char> a; 
関連する問題