1

私は次のC++/CLIスニペットを持っています:

.h
#pragma unmanaged
#include <vector>

public delegate std::vector<std::wstring> XYZ(const std::wstring& filter);

.cpp

XYZ^ xyz = gcnew XYZ(&myClass::xyzFunc); // <-error C2065 + C2061

この場合、この行で2つのエラーが発生します。

エラーC2065:'xyz':宣言されていない識別子

エラーC2061:構文エラー:識別子'XYZ'

ただし、デリゲートの戻りタイプをvector-> wstring(たとえば)から変更すると、機能します。

public delegate std::wstring XYZ(const std::wstring& filter); // <-- w/o vector<> , works!

誰かが問題が何であるか考えていますか?よろしくお願いします!

4

1 に答える 1

1

明らかにこれはコンパイラの欠陥であり、少なくとも、デリゲート型をシンボルテーブルに追加しなかった理由を診断する必要があります。あなたはそれをconnect.microsoft.comに提出することができますが、彼らはそれを修正するつもりはありません。

回避策は、typedefを使用して戻り値の型を宣言することです。

typedef std::vector<std::wstring> returntype;
delegate returntype XYZ(const std::wstring& filter);

C ++/CLIを相互運用言語として扱うことを少しお勧めします。これが主な理由です。このデリゲートは、他のマネージコードでは使用できません。文字列とここを支持してList<String^>ください。

于 2012-10-16T11:15:44.287 に答える