0

コードが最初に来ます:

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>ました。何が悪いのか誰が教えてくれますか?

4

2 に答える 2

2

これは非標準関数であり、通常は で定義されてstdlib.hいます (ただし、ANSI-C によって保証されていません。以下の注を参照してください)。

#include<stdlib.h>

次に使用しますitoa()

このcstdlib機能はありません。したがって、含めるcstdlibことは役に立ちません。

また、このオンラインドキュメントには次のように記載されていることに注意してください。

携帯性

この関数は ANSI-C では定義されておらず、C++ の一部でもありませんが、一部のコンパイラでサポートされています。

ヘッダーで定義されている場合は、次のように使用する必要がある場合は C++ で:

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

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

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

sprintf次のように整数を文字列に変換するために使用できます。

sprintf(str,"%d",value);// converts to decimal base.
sprintf(str,"%x",value);// converts to hexadecimal base.
sprintf(str,"%o",value);// converts to octal base.
于 2011-09-18T12:22:37.077 に答える
2

itoa は非標準の機能であり、すべてのプラットフォームで使用できるわけではないようです。代わりに snprintf (またはタイプ セーフな std::stringstream) を使用してください。

于 2011-09-18T12:28:49.217 に答える