在外部函数中调用类的成员函数

nsqsmile 2003-10-29 06:28:42
class TForm1 : public TForm
{
...
public:
char* aa(char* bb);
}

在外部函数中调用

void tt()
{
char* tt ;
char* cc;
...
tt = TForm1->aa(cc);

}

出错信息
[C++ Error] main.cpp(35): E2108 Improper use of typedef 'TForm1'

是不是需要声明TForm1的事例?
如何声明?
...全文
470 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fatwave 2003-10-29
  • 打赏
  • 举报
回复
class TForm1 : public TForm
{
...
public:
char* aa(char* bb);
}
你这个是继承类,要有初化的!!

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
aliker 2003-10-29
  • 打赏
  • 举报
回复
怎么会这样?复制,粘贴会出问题?
更正
class cc: public TForm
改为
class TForm1:: public TForm
aliker 2003-10-29
  • 打赏
  • 举报
回复
在外部函数中调用类的成员函数
方法一:通过类对象
Unit1.h
class cc: public TForm
{
...
public:
char* aa(char* bb);
};

在外部函数中调用
#include "Unit1.h"
TForm1 *Form1;
void tt()
{
char* tt ;
char* cc;
...
Form1=new TForm1(NULL);//构造对象
tt = Form1->aa(cc); //通过对象调用类的成员函数
}
方法二:通过类的静态成员函数访问(因为静态成员或成员函数属于类,不属于对象)
Unit1.h
class cc: public TForm
{
...
public:
static char* aa(char* bb);//声明为静态成员函数,只能访问类的静态成员变量,类的其他成员变量不能访问
};

在外部函数中调用
#include "Unit1.h"
void tt()
{
char* tt ;
char* cc;
...
tt = Form1::aa(cc); //可以直接调用类的静态成员函数,格式为类名 作用域分割符 静态成员函数名
}

在这里,我不知道TForm1是不是动态生成的对象,如果不是的话
Form1=new TForm1(NULL);//构造对象 这句去掉
BoyMgl 2003-10-29
  • 打赏
  • 举报
回复
Error! No1.
Try No2
nsqsmile 2003-10-29
  • 打赏
  • 举报
回复
出现同样的错误
geniusdhc 2003-10-29
  • 打赏
  • 举报
回复
char* aa(char* bb);不是类变量(静态变量)前面加个static
static char* aa(char* bb); TForm1::aa(cc); 试一下。
声明TForm1的事例也行。
bonmarshal 2003-10-29
  • 打赏
  • 举报
回复
void tt()
{
TForm1* newform;
newform = new TForm1;//去掉()
char* tt ;
char* cc;
...
tt = newform->aa(cc);

}

再试试
BoyMgl 2003-10-29
  • 打赏
  • 举报
回复
你可以这样写你的类,就像AnsiString一样:
class A
{
public:
int A(int i){ return i+2;}//构造函数
};
再调用:
void functionA()
{
int x = 6;
int y = A(x);
}
这样y=8了!不用声明事例,或者:
声明事例:
void functionB()
{
TForm1 * f = new TForm1(NULL);
char * a="abc";
char * b = f->aa(a);
delete f; f=NULL;
}
nsqsmile 2003-10-29
  • 打赏
  • 举报
回复
xiaolong83(风一样的男子)
你说的是什么意思?

看一下我这个定义如何
void tt()
{
TForm1* newform;
newform = new TForm1();
char* tt ;
char* cc;
...
tt = newform->aa(cc);

}

出错信息
[C++ Error] main.cpp(15): E2285 Could not find a match for 'TForm1::TForm1()'
[C++ Error] main.cpp(36): E2108 Improper use of typedef 'TForm1'
xiaolong83 2003-10-29
  • 打赏
  • 举报
回复
是的,应该这样声明,在TFORM1双击,点击第二个就可以了呀
CPerlAsm_Lx 2003-10-29
  • 打赏
  • 举报
回复
GZ

13,826

社区成员

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

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