new类的问题,帮帮忙看看

zxx_0405 2009-02-18 05:21:37
#ifndef aaH
#define aaH

class a
{
publice:
bool a::fun(int t1,int t2);
}

——————————————

#include <vcl.h>
#pragma hdrstop

#include "BPStudy.h"
#include "aa.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TBPstudyForm *BPstudyForm;
……
void __fastcall TBPstudyForm::Button1Click(TObject *Sender)
{
Taa* f=new Taa();//错误提示:[C++ Error] ICR_BPStudy.cpp(52): E2285 Could not find a match for 'Taa::Taa()'
f->fun(……)
delete f;
}

劳烦大家指点下,谢谢啦!
不知道看明白了没
...全文
147 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingyin55 2009-02-24
  • 打赏
  • 举报
回复
E2285: Could not find a match for 'argument(s)'

No C++ function could be found with parameters matching the supplied arguments. Check parameters passed to function or overload function for parameters that are being passed.
痞子酷 2009-02-23
  • 打赏
  • 举报
回复
接分!
fairchild811 2009-02-20
  • 打赏
  • 举报
回复
class my Class
{public: void foo() {} };

myClass c;
c.foo();
zxx_0405 2009-02-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 fairchild811 的回复:]
不一定都都有new 和 delete。就是类的生命期的开始和结束时
[/Quote]
???
要引用类函数不是都要new类吗?
QuickFish 2009-02-20
  • 打赏
  • 举报
回复
你是不是重载类Taa的构造函数了?
如果你没有定义任何构造函数,编译器会为你自动生成一个默认的构造函数,但是一旦你定义了构造函数,编译器将不再负责此项工作,

建议你检查一下类Taa的声明,
在类Taa的声明再添加一个默认的构造函数 Taa();
fairchild811 2009-02-19
  • 打赏
  • 举报
回复
class a
{
publice:
bool a::fun(int t1,int t2);
}

更改
class Taa
{
publice:
bool fun(int t1,int t2){};
}

如果是fun()缺少函数体,错误信息不是那个。是xxxreferencexxx
Jim@luckeeinc.com 2009-02-19
  • 打赏
  • 举报
回复
類的基本格式就是這樣
沒看懂你代碼裏一直出現的Taa是什麽東西?
如果是寫的
Class a
{

};
那就應該用 a *
類的基本寫法

Class MyClass
{
MyClass(); //構造
~MyClass(); //析構
public:
XXXXXX;
private:
XXXXXX;
};
用的時候就寫 MyClass *myclass = new MyClass();
不用加T
zxx_0405 2009-02-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ydlchina 的回复:]
class a
{
publice:
bool a::fun(int t1,int t2);
}

更改
class Taa
{
publice:
bool fun(int t1,int t2){};
}
[/Quote]

这个可以解释下么?不是恨理解
ydlchina 2009-02-19
  • 打赏
  • 举报
回复
class a
{
publice:
bool a::fun(int t1,int t2);
}

更改
class Taa
{
publice:
bool fun(int t1,int t2){};
}

fairchild811 2009-02-19
  • 打赏
  • 举报
回复
不一定都都有new 和 delete。就是类的生命期的开始和结束时
Jim@luckeeinc.com 2009-02-19
  • 打赏
  • 举报
回复
構造函數通常是做一些初始化的動作
比如可能在類裏的變量要賦初始值的什麽的

析構函數可以認爲做的就是些清理工作 釋放 等動作
zxx_0405 2009-02-19
  • 打赏
  • 举报
回复
感谢大家的热情解答!

我知道是怎么回事了,类是别人写的,写了构造函数的,只是参数类型不是void,我在new时没有带参数

那就是说:new时要调用构造函数的,构造函数可以写一些初始化的东西?
delete时要调用析构函数,析构函数要做些清理性的工作?

可以这样理解么?
oyljerry 2009-02-18
  • 打赏
  • 举报
回复
定义你的构造函数,定义类的时候,最好有一个构造函数
new的时候就会调用构造函数了,...
fairchild811 2009-02-18
  • 打赏
  • 举报
回复
如果你显式声明了

Taa(void); 这个构造函数

那么你在声明类的对象时Taa *aa = new Taa(); 就会调用Taa(void)这个函数

否则上述两种写法都是对的
hemiya 2009-02-18
  • 打赏
  • 举报
回复
确实没提示编译错误,对不起啊。
hemiya 2009-02-18
  • 打赏
  • 举报
回复
Taa* f=new Taa();
此处。
改为楼上的写法。
Taa* f=new Taa;

Taa* f=new Taa();
这么写说明要显示调用Taa()这个构造函数,但是你的类并没有声明这个函数。
虽然编译器会生成一个默认的构造函数Taa(),但是这个是隐含调用的,不用你管,
有编译器负责。这么写Taa();编译器会认为你自己写了个Taa()的构造函数,就去找了,
但你没有声明,编译器没有找到匹配的Taa()函数。
fairchild811 2009-02-18
  • 打赏
  • 举报
回复
不好意思,在codeblocks下试了一下,好像
Taa* f=new Taa();
Taa* f=new Taa;

都可以,没有报错。
fairchild811 2009-02-18
  • 打赏
  • 举报
回复
Taa* f=new Taa();


----> Taa* f=new Taa;
zxx_0405 2009-02-18
  • 打赏
  • 举报
回复
哦,谢谢LS

发帖的时候写错了

更正
void __fastcall TBPstudyForm::Button1Click(TObject *Sender)
{
Taa* f=new Taa();//错误提示:[C++ Error] ICR_BPStudy.cpp(52): E2285 Could not find a match for 'Taa::Taa()'
f->fun(……)
delete f;
}

MEFULEU 2009-02-18
  • 打赏
  • 举报
回复
class a
{
publice:
bool a::fun(int t1,int t2);
}


所以就没有taa....而只有a...

a* f=new a();
f->fun(……)
delete f;
加载更多回复(1)

13,825

社区成员

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

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