-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
以来
なぜ '{'は、コードの先頭にあるのでしょうか? – talnicolas
クラステンプレートをインスタンス化するときは、引数リストを指定する必要があります。 'template class String ...'があれば 'String <> a;'を使うことができますが、すべてのテンプレート引数にデフォルトを指定していても、角括弧。ところで、リンクされた文字のリストとしての文字列は、恐ろしく非効率的になります(実際のデータの各バイトに対して少なくとも4バイトのポインタが必要です)。ノードを動的に割り当てるので、それはおそらくそれよりも悪くなります。通常、ノードあたり最低でも16または32バイトです。 –
@タルニコラス:うーん...あなたは時には[cint](http://en.wikipedia.org/wiki/CINT)スクリプトの対話的に呼び出されることを意図しているが、その場合は、 'iostream'のような標準ヘッダをインクルードする必要があります。 – dmckee