【问题标题】:Visual Studio 2010 c++ compiler issueVisual Studio 2010 c++ 编译器问题
【发布时间】:2013-09-23 09:50:41
【问题描述】:

我有以下很奇怪的情况……我的 Visual Studio 编译器 2010 不喜欢下面这段代码:

    QStringList lst2 = instantiatedTableInstances.split(strComma, skipper);

    for(int i=0; i<lst2.size(); i++)
    {
        TableInstance* tabInst= v->getTableInstance(lst2.at(i));
        result->addInstantiatedTableInstance(tabInst);
    }

它给了我:

..\src\DeserializationFactory.cpp(1196) : error C2143: syntax error : missing ';' before 'constant'
..\src\DeserializationFactory.cpp(1196) : error C2440: '=' : cannot convert from 'QStringList' to 'int'
    No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
..\src\DeserializationFactory.cpp(1198) : error C2228: left of '.size' must have class/struct/union
   type is 'int'
..\src\DeserializationFactory.cpp(1200) : error C2228: left of '.at' must have class/struct/union
    type is 'int'

还有截图:

但是如果我将变量重命名为 lst 而不是 lst2 一切都会编译...

这是 Visual Studio 2010 中的一个有趣的错误(因为 GCC 不关心它)还是有更隐藏的原因?

【问题讨论】:

  • 检查 lst2 是否尚未在范围内定义/声明/宏。
  • lst2 是一个宏。从屏幕截图看起来它有不同的颜色,应该把它扔掉
  • 提示:通过定义 WIN32_LEAN_AND_MEAN 修复。

标签: c++ visual-studio-2010 compiler-errors


【解决方案1】:

这类错误通常是由与变量同名的意外宏导致的。有点 google 会在 Windows SDK 标头Dlgs.h 中找到您这一行:

#define lst2        0x0461

这就是我所说的名称污染

我的猜测是 MS 人认为为每个对话框的控件使用不同的 ID 很难维护,因此他们为 any 对话框的列表提供相同的 ID:@987654324 @,lst2lst3 ... lst16。与任何其他类型的控件相同。但由于某种原因,这个想法没有被抓住,Dlgs.h 标头被遗忘了。

现在,奇怪的是这个头文件默认包含在您的 VC++ 项目中,而不是您的 GCC 编译中。可能环境不一样吧。

【讨论】:

  • 你打败了我;有一个+1。 宏的问题的主要示例
  • @Angew:每个人都知道宏是邪恶的。但如果它被命名为WIN32_DLG_DEFAULT_LIST_2,没人会在意。使用lst2 作为宏名既邪恶又愚蠢。
  • &lt;Dlgs.h&gt; 中定义的预处理器正在使用中。它们是常用对话框(如打开文件对话框)中使用的控件 ID 的符号常量。如果您想自定义一个通用对话框,您将需要这些 ID(请参阅Explorer-Style Hook Procedures)。另外,为每个对话框中的每个控件分配不同的 ID 确实是不可能的。控制 ID 限制为 16 位。
  • 可爱...现在我们也被编译器限制使用一些变量名:)
  • @fritzone:不,通过某些标题。不过,这很常见。
【解决方案2】:

看起来您已经有了一个名为 lst 的变量,它的类型为 int。 是的,我同意它看起来像是编译器的一个错误,因为你在一个新的变量空间中,并且包装了 if(secondStep){}。

【讨论】:

    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 2023-03-26
    • 2011-03-15
    • 2012-03-05
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多