2013-01-31 114 views
0

我繼承,在VS2005編譯罰款C++項目,但是當我在VS2010中打開它,我有很多的智能感知誤差修改的是這樣的:智能感知錯誤2010

智能感知:表達式必須有整數或枚舉類型

實際上打開項目中的一個cpp文件似乎會導致錯誤出現。

以下是導致錯誤的行的類型示例。

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

如果它們只是Intellisense錯誤,請丟棄您的Intellisense DB並讓它重新生成。 (SDF文件,甚至是NCB,如果它仍然存在的話) – Bart

+0

現在,它抱怨它無法打開\ myproject \ release \ msado15.tli - 這些錯誤似乎與ADO有關。 – smithy

+0

如果我沒有弄錯(儘管我幾乎沒有這方面的經驗),它是由VS生成的文件。也許支持它(只是爲了確定),現在就刪除它。看看它是否再生。如果沒有,只需複製您擁有的文件。 – Bart

回答

0

從您在評論中提到的內容(關於IntelliSense未找到.tli文件)中,錯誤應該在您構建解決方案後就會消失。 .tli(和.tlh)文件是由#import指令創建的自動生成的文件,但顯然,您需要編譯具有#import指令的文件才能生成這些文件(僅通過智能感知不會生成他們)。

1

我認識到這是ADO語法的代碼。你正在與一個非標準的語言擴展作鬥爭,這個擴展在過去的十年裏使COM編程變得更加簡單。它允許在C++類上使用__declspec(property)聲明符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; 
} 

智能感知解析器在VS2010中完全徹底檢修,並通過使用Edison Design Group前端重新實現。它只是與語言擴展不兼容,並且不適合索引運算符的使用。我會說,他們可以原諒他們。

你可以在connect.microsoft.com上抱怨這個,但我不會期待奇蹟。問題仍然存在於VS2012中。解決方法是停止使用虛擬屬性並改用getter函數get_Item("Contact")