如何访问另一个窗口中的变量?

问题描述 投票:0回答:1

我试图通过调用

Form2
中的函数
Funkcja()
来访问
Form1
中的变量,但我收到“访问冲突”错误。在这种情况下,它看起来像这样:

Ustring.cpp:项目 Project1.exe 引发异常类 0xc0000005,消息为“在地址 0x175ee0 处遇到异常 0xc0000005:访问冲突读取位置 0x000006d8”。

String A
是否在
private
public
Form2
.

UnicodeString& UnicodeString::operator=(const UnicodeString& src)
{
    System::Internal::Strhlpr::UnicodeAssign(*this, const_cast<UnicodeString&>(src));
    return *this;
}

Unit1.cpp

#include "Unit2.h"

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Form2->Funkcja();
}

Unit2.h

class TForm2 : public TForm
{
__published:    // IDE-managed Components
    void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private:    // User declarations

public:     // User declarations
    __fastcall TForm2(TComponent* Owner);

       String A;
       void __fastcall Funkcja();
};

Unit2.cpp

void __fastcall TForm2::Funkcja()
{
   Form2->A = "";
}
c++builder
1个回答
0
投票

访问冲突错误意味着您正在通过无效的

A
对象指针访问
TForm2
数据成员。

TForm2::Funkcja()
内部,您应该使用
this
指针而不是全局
Form2
指针,例如:

void __fastcall TForm2::Funkcja()
{
   this->A = "";
   // or simply:
   // A = "";
}

如果代码在进行更改后仍然崩溃,则意味着

Form2
使用的
TForm1::Button1Click()
指针未指向有效的
TForm2
对象。

例如,如果在调用

Form2
时尚未创建
Funkcja()
对象。或者,如果它已被创建,但
Form2
指针未更新以指向它。根本没有提供足够的上下文来诊断错误的根本原因。

© www.soinside.com 2019 - 2024. All rights reserved.