繁体   English   中英

Visual Studio 2010 c ++编译器问题

[英]Visual Studio 2010 c++ compiler issue

我有以下非常奇怪的情况...我的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'

和截图:

VS2010错误

如果我将变量重命名为lst而不是lst2所有内容都会编译...

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

这些错误通常是与变量名称相同的意外宏的结果。 有点google会在Windows SDK标头Dlgs.h找到这一行:

#define lst2        0x0461

这就是我所说的名字污染

我的猜测是MS人员认为使用不同的ID来控制每个对话框难以维护的内容,因此他们给出了任何对话框的列表相同的ID: lst1lst2lst3 ... lst16 与任何其他类型的控制相同。 但由于某种原因,这个想法没有抓住, Dlgs.h标题被遗忘了。

现在,奇怪的是,此标头默认包含在VC ++项目中,而不包含在GCC编译中。 也许环境不一样。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM