VS2005で正常にコンパイルされたC++プロジェクトを継承しましたが、VS2010で開くと、次のようなIntelliSenseエラーが多数発生します。
IntelliSense:式は整数型または列挙型である必要があります
プロジェクト内のcppファイルの1つを実際に開くと、エラーが表示されるようです。
エラーの原因となる行のタイプの例を次に示します。
if (pInfoset->Fields->Item["Contact"]->Size <= 0)
VS2005で正常にコンパイルされたC++プロジェクトを継承しましたが、VS2010で開くと、次のようなIntelliSenseエラーが多数発生します。
IntelliSense:式は整数型または列挙型である必要があります
プロジェクト内のcppファイルの1つを実際に開くと、エラーが表示されるようです。
エラーの原因となる行のタイプの例を次に示します。
if (pInfoset->Fields->Item["Contact"]->Size <= 0)
コードは認識しています。これは ADO 構文です。あなたは、過去 10 年間に 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 でもまだ存在します。回避策は、仮想プロパティの使用を停止し、代わりに getter 関数を使用するget_Item("Contact")
ことです。
コメントであなたが言ったこと (IntelliSense が .tli ファイルを見つけられないことについて) から、ソリューションをビルドするとエラーはなくなるはずです。.tli (および .tlh) ファイルは、#import ディレクティブによって作成される自動生成ファイルですが、これらのファイルを生成するには、#import ディレクティブを含むファイルをコンパイルする必要があることは明らかです (IntelliSense だけでは生成されません)。彼ら)。