为什么“小”会给出关于“char”的错误?

时间:2015-01-06 06:45:01

标签: c++ visual-studio-2010 visual-studio-2012

尝试在运行QT5.4的Windows平台上用x86和x86_64编译VS2010,VS2012的开源项目。

名为 unit.h 的文件包含一个部分:

[...]
// DO NOT change noscale's value. Lots of assumptions are made based on this
// value, both in the code and (more importantly) in the database.
enum unitScale
{
   noScale = -1,
   extrasmall = 0,
   small = 1, // Line that causes errors.
   medium = 2,
   large = 3,
   extralarge = 4,
   huge = 5,
   without = 1000
};
[...]

生成

  • 错误C2062:输入' char'意想不到
  • 错误C3805:'输入':意外的令牌,预期'}'或者','

我试着用我的帽子解决它。我删除了" small"在代码中枚举,我仍然得到错误。但在删除所有用途后,我重新命名" small"到" smallo"一切都好。它似乎表示名称冲突,但文件搜索在整个项目中没有给我任何引用。它不是我所知道的任何关键字。

有什么想法吗?

编辑:感谢非常有用的评论,这是一个更奇怪的版本有效。有人可以解释一下吗?

#ifdef small // Same with just straight "#if"
#pragma message("yes")
#endif
#ifndef small
#pragma message("no") // Always prints no.
#endif

#undef small
enum unitScale
{
   noScale = -1,
   extrasmall = 0,
   small = 1,
   medium = 2,
   large = 3,
   extralarge = 4,
   huge = 5,
   without = 1000
};

编辑2:pragma指令显示是,但仅限于先前已加载windows.h标头的文件,并且它在编译器输出中丢失了。 感谢大家!真是个任务。

1 个答案:

答案 0 :(得分:6)

smallrpcndr.h中定义的。它用作MIDL的数据类型。