2012-07-29 87 views
0

我忙于一项任务,我必须创建一个结构,并且必须创建并删除一个对象。结构和对象创建

这里是我如何创建一个函数里面的结构。

struct Operation 
{ 
    char op; 
    double (*apply)(Operation*, double,double); // takes two doubles 
} 

我完全理解。现在必须创建对象。

Operation* Make(char op) 
{ 
    Operation* ret = new Operation; 
    ret -> op = op; 
    ret -> apply = doit;//doit is a norther function 
    return ret; 
} 

我知道 “ - >” 歌剧是一样的话说:

(*ret).op = op; 

和删除对象;

void BrakeObject(Operation& o) 
{ 
    delete o; 
    o = NULL; 
} 

功能(应用)看起来是否与基本功能相同? 这是一个数组吗?

Operation* ret = new Operation; 

什么是对象只是一个函数?

+0

你不” t有一个“带有内部函数的结构”,你有一个带有函数_pointer_ as的结构体一个成员,一个指向一个函数,需要三个参数,而不是两个。您的最后一个函数根本无法编译:break是一个关键字,您不能删除引用。你对' - >'的解释也不清楚......我最后并不真正理解你的问题。 – Mat 2012-07-29 09:30:45

+0

很难说你在这里问什么,但我怀疑你真的想'双(*适用)(双,双); //需要两次双打 '你写的东西不需要两个双打,它需要两个双打和一个操作指针。 – jahhaj 2012-07-29 09:35:43

+0

- >操作符指向指针。 – Monster 2012-07-29 09:41:03

回答

0

看来,你的眼光不匹配的任务...

A)的结构 char op;不能是一个“对象”。这是一个“价值”,嗯... 但char *op;可能会好吗? B)数组。

Operation* ret = new Operation; //is this a array? 

没有。你已经创建了一个指向单个值的指针。 C)运营商。这是错误的语法

(*ret) op = op; 

这将是确定

(*ret).op = op; 

d)删除

void break(Operation& o) 

这是错误的语法,这将是确定

void BrakeObject(Operation*& o) 
{ 
    delete o; 
    o = NULL; 
} 
1

为什么动态分配?为什么不干脆:

Operation Make(char op) 
{ 
    Operation ret = {op, doit}; 
    return ret; 
} 

或者,如果您正在使用C++ 11,简单地说:

Operation Make(char op) 
{ 
    return {op, doit}; 
} 

在这两种情况下,无需手动删除了。

另外,为什么apply需要另一个操作?评论说“需要两个双打”,所以:

double (*apply)(double,double); 

会对我更有意义。另外,doit从哪里来?将apply函数作为参数传递也不是更有意义吗?这里是所有的变化方案建议:

struct Operation 
{ 
    char op; 
    double (*apply)(double, double); 
} 

Operation Make(char op, double (*apply)(double, double)) 
{ 
    Operation ret = {op, apply}; 
    return ret; 
} 

double add(double x, double y) 
{ 
    return x + y; 
} 

Operation op_add = Make('+', add);