Visual c++ can';除非创建委托实例,否则不能获取函数的地址

Visual c++ can';除非创建委托实例,否则不能获取函数的地址,visual-c++,c++-cli,pass-by-reference,Visual C++,C++ Cli,Pass By Reference,我有一个定义如下的类: ref class myClass { PictureBox^ pic2; public: void setPic2() { pic2 = gcnew PictureBox; } template<typename UnaryOperator> void setPic2Click(Form^ x, UnaryOperator op) { pic2->Click += gcnew EventHandler(x, op);

我有一个定义如下的类:

ref class myClass
{
    PictureBox^ pic2;
public:
    void setPic2() { pic2 = gcnew PictureBox; }

    template<typename UnaryOperator>
    void setPic2Click(Form^ x, UnaryOperator op) { pic2->Click += gcnew EventHandler(x, op); }
};
编译时,它生成了与
rect1.setPic2Click
调用相关的错误…:

错误C3374:除非创建委托实例,否则无法获取testProject::Form1::pic2的地址


基本上,我试图通过创建实例方法
setPic2Click
来封装picturebox的接口。这是正确的方法吗?有没有关于如何纠正此错误的建议?

您唯一的错误是,您试图以一种不起作用(也没有意义)的方式混合托管和非托管C++/CLI代码

.NET委托已具有绑定的第一个参数。您所需要的只是:

class1->setPic2Click(gcnew System::EventHandler(this, &Form1::pic2_Click));

class1->setPic2Click(gcnew System::EventHandler(this, &Form1::pic2_Click));
void setPic2Click(System::EventHandler^ op) {pic2->Click += op;}