【问题标题】:Non-POD object error非 POD 对象错误
【发布时间】:2014-05-21 11:48:39
【问题描述】:

所以,我已经在网上阅读了很多关于这个错误的信息,但由于某种原因,即使在我尝试了建议的事情之后,我仍然会得到它。如果有人可以帮助我理解这一点并指出问题所在,那就太棒了。

char * s = strtok(text, ",");
string name = s;
printf("%s", name);

【问题讨论】:

标签: c++


【解决方案1】:

鉴于您的示例代码,您得到的错误是您无法将非 POD 对象传递给省略号。这是因为您试图将非 POD 类型传递给可变参数函数,该函数接受可变数量的参数。在这种情况下,通过调用 printf 声明如下

int printf ( const char * format, ... );

用作最后一个参数的省略号允许您向函数传递 0 个或多个附加参数,就像您在代码中所做的那样。 C++ 标准确实允许您传递非 POD 类型,但编译器不是需要来支持它。这部分包含在标准的 5.2.2/7 中。

传递具有非平凡复制构造函数、非平凡移动构造函数或非平凡析构函数的类类型的潜在评估参数,没有相应的参数,有条件地支持实现定义的语义。

这意味着由每个编译器制造商决定是否他们想要支持它以及它将如何表现。显然你的编译器不支持这个,即使它支持我也不推荐使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-15
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    相关资源
    最近更新 更多