我试图通过调用
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 = "";
}
访问冲突错误意味着您正在通过无效的
A
对象指针访问TForm2
数据成员。
在
TForm2::Funkcja()
内部,您应该使用this
指针而不是全局Form2
指针,例如:
void __fastcall TForm2::Funkcja()
{
this->A = "";
// or simply:
// A = "";
}
如果代码在进行更改后仍然崩溃,则意味着
Form2
使用的 TForm1::Button1Click()
指针未指向有效的 TForm2
对象。
例如,如果在调用
Form2
时尚未创建Funkcja()
对象。或者,如果它已被创建,但 Form2
指针未更新以指向它。根本没有提供足够的上下文来诊断错误的根本原因。