首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

C++Builder有关问题

2012-02-24 
C++Builder问题 - C++ Builder / Windows SDK/API本人初接触C++Builder現问题描述如下:运行时出现:Project

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

热点排行