C++Builder问题 - C++ Builder / Windows SDK/API
本人初接触C++Builder
问题描述如下:
运行时出现:
Project Project1.exe raised exception class EStackOverflow with message 'Stack overflow'.Process stopped.Use Step or Run to continue.
我定义了一个Form类的私有变量a,自动产生geta和seta(int)两函数有如下代码:
- C/C++ code
//下面代码自动产生private: void __fastcall Seta(int value); int __fastcall Geta(); __property int a = { read=Geta, write=Seta }; // User declarations//下面代码自己写的简单的测试一下的程序void __fastcall TForm1::Button1Click(TObject *Sender){ this->Seta(50); ShowMessage(IntToStr(this->Geta()));}//---------------------------------------void __fastcall TForm1::Seta(int value){ this->a = value; //TODO: Add your source code here}int __fastcall TForm1::Geta(){ return this->a; //TODO: Add your source code here}请问各位大侠:有哪里问题不对吗
[解决办法]
晕。你这类设计的,分明是个死循环。
给a属性赋值是调用了Seta方法,而在Seta方法中,再一次调用给属性a赋值,这样就是标准的死循环。
应该这样设计:
- C/C++ code
private: int m_a; void __fastcall Seta(int value); int __fastcall Geta(); __property int a = { read=Geta, write=Seta }; // User declarations//下面代码自己写的简单的测试一下的程序void __fastcall TForm1::Button1Click(TObject *Sender){ this->Seta(50); ShowMessage(IntToStr(this->Geta()));}//---------------------------------------void __fastcall TForm1::Seta(int value){ m_a = value;}int __fastcall TForm1::Geta(){ return m_a;}
[解决办法]
>>>那a和m_a有什么区别呢?
a是属性,m_a是一个整形变量,用来存储属性a中的值。
>>>new Field和new Property
前者通常是定义一个变量,后者是定义一个属性。