我继承了一个在VS2005中可以正常编译的C ++项目,但是当我在VS2010中打开它时,会得到很多类似IntelliSense的错误:


  IntelliSense:表达式必须具有整数或枚举类型


实际上,在项目中打开一个cpp文件似乎会导致出现错误。

这是导致错误的行类型的示例。

if (pInfoset->Fields->Item["Contact"]->Size <= 0)

最佳答案

我识别出代码,这就是ADO语法。您正在与非标准语言扩展进行斗争,该扩展使COM编程在过去十年中变得更加容易。它使用__declspec(property)声明符在C ++类上允许declaring properties。一个例子:

class Example {
public:
    int GetX(const char* indexer) { return 42;}
    void PutX(const char* indexer, int value) {}
    __declspec(property(get=GetX,put=PutX)) int x[];
};

int main()
{
    Example e;
    int value = e.x["foo"];   // Barf
    return 0;
}


IntelliSense解析器已在VS2010中进行了全面改进,并通过使用Edison Design Group前端进行了重新实现。它与语言扩展的兼容性不够,会超出索引运算符的使用范围。我会说,对此可以原谅。

您可以在connect.microsoft.com上对此抱怨,但是我不希望出现奇迹。该问题在VS2012中仍然存在。一种解决方法是停止使用虚拟属性,而改为使用getter函数(在您的情况下为get_Item("Contact"))。

关于c++ - 在VS 2010中打开VS 2005 C++项目后出现IntelliSense错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14633995/

10-13 09:08