2012-04-19 7 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

+0

Когда вы создаете экземпляр шаблона класса, вам нужно предоставить список аргументов. Если у вас есть 'template class String ...', вы сможете использовать 'String <> a;', но даже с настройками по умолчанию для всех аргументов шаблона вам нужно включить угловые скобки , BTW, строка в виде связанного списка символов будет * ужасно * неэффективной (нарисуйте по крайней мере 4 байта указателей для каждого байта фактических данных). Поскольку вы распределяете узлы динамически, это, вероятно, даже хуже, чем обычно - как правило, минимум 16 или 32 байта на узел. –

+0

@talnicolas: Хм ... вы видите, что иногда в начале скриптов [cint] (http://en.wikipedia.org/wiki/CINT), которые предназначены для интерактивного вызова, но в этом случае вы не захотите, t нужно «# включить» стандартный заголовок, например 'iostream'. – dmckee

ответ

4

С String шаблонный класс, он должен быть:

String<char> a; 
Смежные вопросы