我用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 ;







...全文
162 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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) ;
内容概要:该文档为一段用于Google Earth Engine(GEE)平台的JavaScript代码脚本,旨在对研究区域(AOI)内的Landsat 8卫星影像进行土地利用/土地覆盖(LULC)分类。脚本首先筛选2024年云量低于10%的Landsat 8 Level-2地表反射率影像,构建中值合成影像并应用缩放因子校正。随后,基于预先定义的水体(Water)和植被(Vegetation)样本点,合并训练样本并提取影像对应波段数据,采用随机森林分类器(smileRandomForest)对影像进行监督分类。最后,通过划分训练集与测试集,输出混淆矩阵、总体分类精度和Kappa系数,完成分类结果的精度评估。; 适合人群:具备遥感图像处理基础知识的科研人员、地理信息系统(GIS)技术人员以及环境监测相关领域的研究生或专业人员;熟悉GEE平台基本操作者更佳; 使用场景及目标:①实现特定区域多光谱遥感影像的土地覆盖分类;②掌握GEE平台上从影像预处理、样本构建、模型训练到精度验证的完整分类流程;③支持水资源管理、生态环境监测等应用领域的空间数据分析; 阅读建议:此资源以实际代码形式呈现,建议结合GEE开发环境边运行边学习,重点关注影像预处理方法、训练样本构建逻辑、分类器参数设置及精度评估指标解读,便于迁移应用于其他区域或传感器数据。

13,873

社区成员

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

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