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

를 추가로 해결할 문제가있다! 다른 좋은 방법과 효과적인 방법이 있습니까? 그리고 템플릿에 대한 신뢰할 수 있고 읽기 쉬운 참조를 알고 있습니까? String 이후

+2

이유가있는'{'코드의 시작 부분에? – talnicolas

+0

클래스 템플릿을 인스턴스화 할 때 인수 목록을 제공해야합니다. 'template class String ...'을 사용했다면'String <> a;'를 사용할 수 있지만, 모든 템플릿 인자의 기본값이더라도 꺽쇠 괄호 . BTW, 연결된 문자 목록으로 문자열을 * horrendously * 비효율적 인 것입니다 (실제 데이터의 모든 바이트에 대한 포인터 적어도 4 바이트 그림). 노드를 동적으로 할당하기 때문에 일반적으로 노드 당 최소 16 또는 32 바이트가됩니다. –

+0

@talnicolas : 음 ... 대화식으로 호출되는 [cint] (http://en.wikipedia.org/wiki/CINT) 스크립트의 시작 부분에서 가끔 볼 수 있지만 그 경우에는 ' iostream과 같은 표준 헤더를'#include '할 필요가있다. – dmckee

답변

4

템플릿 클래스, 그것은해야한다 :

String<char> a; 
관련 문제