在VS 2010中打开VS 2005 C ++项目后出现IntelliSense错误

时间:2013-01-31 19:52:33

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

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

  

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

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

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

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

2 个答案:

答案 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指令的文件,以便生成这些文件(仅智能感知不会生成它们)。