2012-07-29 139 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);