非POD对象错误

时间:2014-05-21 03:18:51

标签: c++

所以,我已经在线阅读了很多这个错误,但出于某种原因,即使在我尝试了建议的内容后,我仍然会得到它。如果有人能帮助我理解这一点并指出错误,那将是非常棒的。

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

1 个答案:

答案 0 :(得分:2)

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

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

用作最后一个参数的省略号允许您将0个或更多其他参数传递给函数,就像在代码中一样。 C ++标准确实允许您传递非POD类型,但编译器不是必需来支持它。这部分由标准的5.2.2 / 7部分涵盖。

  

通过实现定义的语义有条件地支持传递具有非平凡复制构造函数,非平凡移动构造函数或非平凡析构函数的类类型的可能已评估的参数,其中没有相应的参数。 / p>

这意味着由每个编译器制造商决定 if 他们是否希望支持它的行为方式。显然你的编译器不支持这个,即使它确实如此,我也不建议使用它。