模板函数中的 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
但我确实包含了
。 谁能告诉我出了什么问题?
Code goes first:
template <typename T>
void do_sth(int count)
{
char str_count[10];
//...
itoa(count, str_count, 10);
//...
}
but I got some compile-error like this:
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
But I indeed included <cstdlib>
.
Who can tell me what's wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
itoa 似乎是一个非标准函数,并非在所有平台上都可用。使用 snprintf 代替(或类型安全的 std::stringstream)。
It appears that itoa is a non-standard function and not available on all platforms. Use snprintf instead (or type-safe std::stringstream).
它是一个非标准函数,通常在
stdlib.h
中定义(但它不受 ANSI-C 保证,请参见下面的注释)。然后使用
itoa()
注意,
cstdlib
没有这个函数。因此,包含cstdlib
没有帮助。另请注意,此在线文档说,
如果它在标头中定义,那么在 C++ 中,如果您必须将其用作:
便携式解决方案
您可以使用 sprintf 将整数转换为字符串,如下所示:
It is a non-standard function, usually defined in
stdlib.h
(but it is not gauranteed by ANSI-C, see the note below).then use
itoa()
Note that
cstdlib
doesn't have this function. So includingcstdlib
wouldn't help.Also note that this online doc says,
If it's defined in the header, then in C++, if you've to use it as:
A portable solution
You can use
sprintf
to convert the integer into string as: