警告C4099:使用'struct'时首次看到使用'class'的类型名称(MS VS 2k8)

Ada*_*lor 15 c++ compiler-warnings

这个警告有什么值得担心的吗?我读过它可能导致不稳定的行为?

这是我正在尝试编译的一个例子,有人可以向我解释为什么作者将对象声明为一个类但是然后将typedef表示为一个结构?如果课程是POD,这样做是否完全正常?

谢谢.

Dan*_*ull 25

如果您有一个与另一个相矛盾的类型声明(一个表示"class",另一个表示"struct"),则会出现此警告.给定一个定义规则,除最多一个之外的所有声明必须是前向声明.警告通常表明类型的前向声明是错误的,通常是一个简单的拼写错误,应该修复.在这种情况下,应该没有副作用,但你真的应该解决它.

但是,如果你有类型名称冲突(可能是由于使用"using namespace"子句或全局命名空间污染引起的),可能会发生一些非常令人讨厌的事情.这些警告可能表示您正在混合来自两个不同库的标头,并且类型名称有冲突.在这些条件下编译的代码可以做一些非常意外的事情.

我的建议 - 理解为什么警告出现并修复它.如果警告是在第三方产品中,请坚持要求他们修复它.

  • MS Mangling Scheme在http://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B_Name_Mangling#Data_Type:`union`编码为`T`,`struct`编码为`U`,`class`编码为`V`. (3认同)

Ric*_*den 5

只是为了使MSalters对上面这篇文章的评论达到最高水平。由于VC在名称处理中使用了'class'或'struct'关键字,导致我很难找到链接器错误。

如果您不希望这是一个问题,那么您可能要花几个小时挠头!