我在哪里可以声明类obj

时间:2010-07-31 00:26:02

标签: visual-c++ c++-cli

我有Windows窗体应用程序 2文本框1,2 2按钮1,2 我有上课的人{有get,set(string,int)} 我想宣布 人p; 在两个按钮1,2中看到它

我的问题是我宣布 人p;按钮结束时的内部按钮 p .~person();被称为 所以我不能保存价值

当我调用p.get时,我得到初始值

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
         {person p;
      //string str;
  stringstr(constchar*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(textBox1->Text).ToPointer();
             p.set( str,int ::Parse(textBox2->Text));


private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e)
         {person p;
          string str;
         int ag;
         p.get(str,ag);

我将课程声明为

 class person
{
public:
    person();// create initial value
    ~person();//descon
    void set(string z,int a);//set value
    void get(string &z,int &a);//get value
private:

    string name;
    int age ;

};

------------------------------------------------------------
person cpp
#include "StdAfx.h"
#include "person.h"
#include "stdafx.h"

using namespace std;
using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;

person::person()
{name="null";
 age=-1;

}
person::~person()
{
}

void person::set(string z, int a)
{name=z;
age= a;
}
void person::get(string &z, int &a)
{z =name;
a=age;
}

我可以上传所有解决方案吗?

1 个答案:

答案 0 :(得分:0)

你想要做的是使p成为表单对象本身的成员。这样,所有事件处理程序都可以访问它。

从您的事件处理程序中取出person p;并将其放在表单中。在C#中你只需将它放在第一个事件处理程序之上 - 我不确定你在C ++ / CLI中做了什么,但它值得一试。

person p;

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
{
    ...
    // Use p here
    p.set( str,int ::Parse(textBox2->Text));
}


private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e)
{
    ...
    // It's still the same p here
    p.get(str,ag);
}