Итоа в шаблонной функции - PullRequest
       42

Итоа в шаблонной функции

0 голосов
/ 18 сентября 2011

Код идет первым:

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>.Кто подскажет, что не так?

Ответы [ 2 ]

2 голосов
/ 18 сентября 2011

Похоже, что itoa является нестандартной функцией и доступна не на всех платформах. Вместо этого используйте snprintf (или типобезопасный std :: stringstream).

2 голосов
/ 18 сентября 2011

Это нестандартная функция, обычно определяемая в 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.
...