读书人

C++Builder有关问题

发布时间: 2012-02-24 16:30:38 作者: rapoo

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
前者通常是定义一个变量,后者是定义一个属性。

读书人网 >C++ Builder

热点推荐