Visual C ++:将事件处理程序解压缩到.cpp文件

时间:2018-04-10 14:02:42

标签: c++-cli

作为一名php开发人员,在做了很多算法c ++练习后,我决定开始学习Visual C ++。刚开始之后我就陷入了非常基本的困境。我试图从.h文件中将Button-click事件解压缩到我的.cpp文件。

我的.h文件:

#pragma once

namespace Project1 {
...
    this->button2->Click += gcnew System::EventHandler(this, &MyForm::button2_Click);
...
}

在我的.cpp文件中,我试过这样做:

#include "MyForm.h"
using namespace System;
using namespace System::Windows::Forms;
namespace Project1 {
    [STAThread]
    void main(array<String^>^ args)
    {

        void MyForm::button2_Click(System::Object^  sender, System::EventArgs^  e) {
            // definition
        }
...
}

它不起作用。它说Project1 :: MyForm没有button2_Click。我错过了什么?

1 个答案:

答案 0 :(得分:1)

标准'学习语言'警告:这不是你正在编写的C ++,它是C ++ / CLI。 C ++ / CLI是Microsoft的一种语言,旨在允许C#或其他.Net语言与标准C ++进行交互。在这种情况下,C ++ / CLI可以提供两者之间的转换。如果您还在学习C ++,请不要从C ++ / CLI开始。为了在C ++ / CLI中有效地编写,人们应该已经知道C ++和C#,然后还有关于C ++ / CLI的东西要学习。如果你想学习C ++,坚持使用标准(非托管)C ++。 (在Visual Studio中,创建一个“Win32”C ++项目。)如果您想学习托管代码,那么我会使用C#。

void main(array<String^>^ args)
{
    void MyForm::button2_Click(System::Object^  sender, System::EventArgs^  e) {
        // definition
    }
}

这不是你如何定义方法:你已经在另一个方法的定义中得到了一个方法的定义,而这是不允许的。

你需要做的是在MyForm.h中声明button2_Click方法,并在MyForm.cpp中实现它的实现

// MyForm.h
public ref class MyForm : System::Windows::Forms::Form
{
    // Lots of other stuff...
private:
    void button2_Click(System::Object^ sender, System::EventArgs^ e);
}

// MyForm.cpp
#include "MyForm.h"

void MyForm::button2_Click(System::Object^ sender, System::EventArgs^ e)
{
    // definition
}