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

在这种情况下,我在这一行遇到两个错误:

错误 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 视为一种互操作语言,这是它存在的主要原因。此委托不能由任何其他托管代码使用。请支持 String 和List<String^>这里。

于 2012-10-16T11:15:44.287 回答