2011-09-18 6 views
0

コードが最初に行く:itoaは

template <typename T> 
void do_sth(int count) 
{ 
    char str_count[10]; 
    //... 
    itoa(count, str_count, 10); 
    //... 
} 

が、私はこのようにいくつかのコンパイルエラーが発生しました:

error: there are no arguments to ‘itoa’ that depend on a template parameter, so a declaration of ‘itoa’ must be available 
error: ‘itoa’ was not declared in this scope 

しかし、私は確かに<cstdlib>が含まれています。 何が間違っているのか教えてください。

+1

が#含まれていますか?または、より良い、とstd :: itoaとしてこの関数を使用します。 – dimitri

+0

printf、operator <<(ostream&、int)、昇格カルマ、昇順形式、lexical_castなどをやり直そうとしていますか? – sehe

+0

@dimitri、私は両方の方法を試しましたが、何も動作しません。代わりにstringstreamを使用します。 – Alcott

答えて

2

itoaは非標準関数であり、すべてのプラットフォームで利用可能ではありません。代わりにsnprintfを使用してください(またはタイプセーフなstd :: stringstream)。

2

通常はstdlib.hで定義されている非標準機能です(ただし、ANSI-Cでは使用できません。以下の注記を参照してください)。

#include<stdlib.h> 

その後、cstdlibがこの機能を持っていないことをitoa()

注意を使用しています。したがって、cstdlibを含めては助けになりません。

はまた、移植性

この関数は、ANSI-Cで定義されていないと C++の一部ではありませんが、いくつかのコンパイラでサポートされている。

this online docが言うことに注意してください

それはヘッダで定義されていた場合は、C++で、あなたのようにそれを使用した場合:

extern "C" 
{ 
    //avoid name-mangling! 
    char * itoa (int value, char * str, int base); 
} 

//then use it 
char *output = itoa(/*...params*...*/); 

ポータブルソリューションを

をあなたが変換するsprintfを使用することができます文字列への整数:

+0

いいえ、「stdのメンバーではありません」という別のエラーが発生しました。 – Alcott

+0

@Alcott:実際には、 'std ::'を使う必要はありません。私は習慣的にそれを書いた:P – Nawaz

+0

うん、だから私はstdlib.hをcstdlibではなく含める必要がありますか?私はcstdlibがC++のstdlib.hに相当すると考えました。 – Alcott