0

我继承了一个在 VS2005 中编译良好的 C++ 项目,但是当我在 VS2010 中打开它时,我得到了很多这样的 IntelliSense 错误:

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

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

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

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

2 回答 2

1

我认识代码,那是 ADO 语法。您正在与一种非标准语言扩展作斗争,这种扩展在过去十年中使 COM 编程变得更容易。它允许使用声明符在 C++ 类上声明属性__declspec(property)。一个例子:

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 中仍然存在。get_Item("Contact")在您的情况下,一种解决方法是停止使用虚拟属性并改用 getter 函数。

于 2013-01-31T23:19:45.633 回答
0

根据您在评论中所说的内容(关于 IntelliSense 找不到 .tli 文件),一旦您构建了解决方案,错误应该会消失。.tli(和 .tlh)文件是由 #import 指令创建的自动生成的文件,但显然您需要编译具有 #import 指令的文件才能生成这些文件(仅 IntelliSense 不会生成他们)。

于 2013-01-31T22:42:08.320 回答