无法从一个类访问另一个类的实例

时间:2013-06-05 19:05:34

标签: .net visual-studio c++-cli

的main.cpp

 #include "stdafx.h"
 #include <iostream>
 #include "Form1.h"
 #include "myclass.h"
using namespace Akva;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{

Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false); 
Form1^ MainForm = gcnew Form1();
Application::Run(MainForm);
return 0;
};

Form1.h

#include "myclass.h"
public ref class Form1 : public System::Windows::Forms::Form
{
        ...
    };

myclass.h

#include "Form1.h"
class MyClass
{
    public: void addBox();
};

void MyClass::addBox()
{
    PaintBox^ pb = cgnew PaintBox();
    MainForm->Controls->Add(pb);  //here
};

我无法从“MyClass”类访问main.cpp中的实例“MainForm”。 我怎么能得到它?

UPD :myclass.h中的代码包含在我创建实例MainForm之前,而Form1的实例在myclass.h中不可见。

 #include "stdafx.h"
 #include <iostream>
 #include "Form1.h"
 #include "myclass.h"
using namespace Akva;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{

Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false); 
Application::Run(gcnew Form1()); //here
return 0;
};

另一个问题:我如何能够访问Form1的元素和实例?

我想从“MyClass”创建PictureBox。

3 个答案:

答案 0 :(得分:1)

  

我怎么能得到它?

您需要在main.cpp中#include myclass.h才能在Form1内使用它。

答案 1 :(得分:0)

  

我无法通过课程&#34; MyClass&#34;到实例&#34; MainForm&#34;在main.cpp中。我怎么能得到它?

MainForm是方法main中的局部变量。该方法之外的任何代码都无法读取该局部变量。

您可以将MainForm局部变量中包含的实例传递给其他代码,以便其他代码可以访问它,但是没有足够的代码来帮助您。

您在MainForm中尝试访问MyClass::addBox的方式就像一个全局变量。这是你想要做的吗?通常要避免全局变量,但如果这是你想要的,请在main.cppmyclass.cpp都可以看到的头文件中声明它,并像你一样初始化它已在main()中完成。

答案 2 :(得分:0)

您至少有两个解决方案:

  • 将表单实例传递给 MyClass构造函数

    #include "Form1.h"
    
    class MyClass
    {
        private: MainForm^ mainForm;
        public: MyClass(MainForm^ mainForm);
        public: void addBox();
    };
    
    void MyClass::MyClass(MainForm^ mainForm)
    {
        this->mainForm = mainForm;
    }
    
    void MyClass::addBox()
    {
        PaintBox^ pb = cgnew PaintBox();
        mainForm->Controls->Add(pb);  //here
    };
    
  • 将表单实例传递给 addBox 方法:

    #include "Form1.h"
    
    class MyClass
    {
        public: void addBox(MainForm^ mainForm);
    };
    
    void MyClass::MyClass(MainForm^ mainForm)
    {
        this->mainForm = mainForm;
    }
    
    void MyClass::addBox(MainForm^ mainForm)
    {
        PaintBox^ pb = cgnew PaintBox();
        mainForm->Controls->Add(pb);  //here
    };