我继承了一个在VS2005中编译得很好的C ++项目,但是当我在VS2010中打开它时,我得到了很多像这样的IntelliSense错误:
IntelliSense:表达式必须具有整数或枚举类型
实际上打开项目中的一个cpp文件似乎会导致出现错误。
以下是导致错误的行类型的示例。
if (pInfoset->Fields->Item["Contact"]->Size <= 0)
答案 0 :(得分:1)
我认识到代码,这是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")
。
答案 1 :(得分:0)
根据您在评论中提到的内容(关于IntelliSense未找到.tli文件),一旦您构建解决方案,错误就会消失。 .tli(和.tlh)文件是由#import指令创建的自动生成的文件,但显然您需要编译具有#import指令的文件,以便生成这些文件(仅智能感知不会生成它们)。