我用NEW 新建一个自己的控件, 为何出错?

sdjifeng 2002-09-13 11:13:01
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int f;
String fn;
if(OpenDialog1->Execute())
{
fn=OpenDialog1->FileName;

f=FileOpen(fn,fmOpenRead);
FileClose(f);
Memo1->Lines->LoadFromFile(fn); }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo2 = new TMemo2 ((TForm *) Sender) ;
}
//---------------------------------------------------------------------------




//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TOpenDialog *OpenDialog1;
TMemo *Memo1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
TMemo * TMemo2;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
class TMemo2 : public TMemo
{ private:
unsigned int size ;
};






[C++ Error] Unit2.cpp(34): E2451 Undefined symbol 'Memo2'
[C++ Error] Unit2.cpp(34): E2303 Type name expected
[C++ Error] Unit2.cpp(34): E2379 Statement missing ;







...全文
144 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
huzhangyou 2002-09-22
  • 打赏
  • 举报
回复
呵呵
learning.............................................
sdjifeng 2002-09-22
  • 打赏
  • 举报
回复
我发现使用以下代码可以解决问题
MyMemo1 = new TMyMemo (this) ;
MyMemo1->Parent = (this) ;
不容易啊!
sdjifeng 2002-09-15
  • 打赏
  • 举报
回复
谢谢xi8kuang
TMemo *Memo2=new TMemo(this);//
Memo2->Parent = Form1;
是可行的。
但是Memo2仅仅在 TForm1::FormCreate中可用,
在TForm1::Button1Click()中就不可用了,变成了NULL,好奇怪。
我应怎么办?
IT-司马青衫 2002-09-14
  • 打赏
  • 举报
回复
class TMemo2 : public TMemo
{ private:
unsigned int size ;
};
放在这之前
class TForm1 : public TForm
这是C++或C数据类型向前声明

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo2 = new TMemo2 ((TForm *) Sender) ;//因改放在构造函数中
}
//你这个是重载VCL的MEMO类
//NEW时调用默认的构造函数
//Memo2=new TMemo2(this);//THIS表示谁拥有该类的对象

fn=OpenDialog1->FileName;

f=FileOpen(fn,fmOpenRead);//
FileClose(f);//这两行代码多余的,如果采用其它方式来就需要句柄
Memo1->Lines->LoadFromFile(fn); }

Currency 2002-09-14
  • 打赏
  • 举报
回复

我觉得这样可能好理解

Memo2 = new TMemo2(this);
Memo2->Parent = Form1;
gyj_china 2002-09-14
  • 打赏
  • 举报
回复
只要把 Memo2 = new TMemo2 ((TForm *) Sender) ;
改成 Memo2 = new TMemo (this);就可以了。
christopher_hp 2002-09-14
  • 打赏
  • 举报
回复
TMemo *Memo2=new TMemo(NULL);//如果NULL不行就用this
Memo2->Parent=Form1;
在设置它的Top,Left,Height,Width属性
不需要Memo2->Show()这样做
最后看看,需要添加头文件不,自己看看帮助
ThinkX 2002-09-14
  • 打赏
  • 举报
回复
TMemo2没有默认的构造函数,自己写一个了。
sdjifeng 2002-09-14
  • 打赏
  • 举报
回复
谢谢大家,我已经该过了,但怎么仍出错?

//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
class TMemo2 : public TMemo //手工兴建一个Memo2
{
private:
unsigned int size ; //加入一个属性,仅仅是测试用
};

//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TOpenDialog *OpenDialog1;
TMemo *Memo1; // 它的用处仅仅是与Memo2比较,
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private:
TMemo2 * Memo2;
// TMemo * TMemo2;
public:
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif




//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
String fn;
if(OpenDialog1->Execute())
{ fn=OpenDialog1->FileName;
//Memo1->Lines->LoadFromFile(fn); //这样用大家都会
Memo2->Lines->LoadFromFile(fn);
}
}
//---------------------------------------------------------------------------


void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo2 = new TMemo2 (this) ; //系统报告error
Memo2->Parent = Form1;
Memo2->Top=200;
Memo2->Width =49;
Memo2->Left=150;
Memo2->Height=100;
Memo2->Show;

}
//---------------------------------------------------------------------------




// [C++ Error] Unit2.cpp(33): E2125 Compiler could not generate default constructor for class 'TMemo2'
// [C++ Error] Unit2.cpp(35): E2235 Member function must be called or its address taken
chinagy 2002-09-14
  • 打赏
  • 举报
回复
1.头文件写错了,#endif 应放在最后一行;
2.调用时
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo2 = new TMemo2 (this) ;
Memo2->Parent = Form1;
Memo2->Show;
}
kingcaiyao 2002-09-13
  • 打赏
  • 举报
回复
oh,对了楼上说的对,应该放在前面,没看清楚,不好意思:
whitelion 2002-09-13
  • 打赏
  • 举报
回复

class TMemo2 : public TMemo
{ private:
unsigned int size ;
};
放在
TForm1 *Form1;
之前
把TMemo * TMemo2;
改为TMemo2 * Memo2;
kingcaiyao 2002-09-13
  • 打赏
  • 举报
回复
代码看起来很混乱,这样:
//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TOpenDialog *OpenDialog1;
TMemo *Memo1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
TMemo * TMemo2;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
class TMemo2 : public TMemo
{ private:
unsigned int size ;
};
改成:
//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TOpenDialog *OpenDialog1;
TMemo *Memo1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
TMemo * TMemo2;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
class TMemo2 : public TMemo
{ private:
unsigned int size ;
};

//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

whitelion 2002-09-13
  • 打赏
  • 举报
回复
TMemo * TMemo2;
改为:
TMemo * Memo2;
whitelion 2002-09-13
  • 打赏
  • 举报
回复
Memo2 = new TMemo2 ((TForm *) Sender) ;
改为
Memo2 = new TMemo ((TForm *) Sender) ;

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧