我试图在2010VC ++中运行较旧的VC ++代码我收到错误C387错误

时间:2010-12-19 22:39:38

标签: c++-cli

this->InitButton->Location = System::Drawing::Point(24, 8);
this->InitButton->Name = S"InitButton";
this->InitButton->Size = System::Drawing::Size(184, 24);
this->InitButton->TabIndex = 0;
this->InitButton->Text = S"Initialize NMC Network";

// this give an error
this->InitButton->Click += new System::EventHandler(this, InitButton_Click);

3 个答案:

答案 0 :(得分:2)

this->InitButton->Click += gcnew System::EventHandler(this, InitButton_Click);

那是C3867,而不是C387。您必须在C ++ / CLI中使用方法名称指定类名。分配委托的语法与C#语言的语法完全不同,根本就没有语法糖。这与VS2010无关,它也无法在早期版本中编译。修正:

this->InitButton->Click += gcnew System::EventHandler(this, &Form1::InitButton_Click);

Form1 替换为Form派生类的名称。你实际上并不需要&但它是设计器生成的代码中的样板。让设计人员生成此代码是避免麻烦的最佳方法。

答案 1 :(得分:0)

除了Hans关于为委托构造获取指针成员的正确方法的答案之外,C ++ / CLI不在托管字符串上使用S前缀。

答案 2 :(得分:0)

谢谢, 你是对的错误代码(错字)。我现在能够编译并发出警告。我做了一些改变。 将公共语言运行时支持更改为旧语法,并且能够编译并运行它。

公共语言运行时支持,旧语法(/ clr:oldSyntax)