2012-07-29 6 views
0

저는 작업이 많아서 구조체를 생성해야하며 그 구조체를 사용하여 객체를 만들고 삭제해야합니다.구조체 및 객체 생성

여기에 함수가 들어있는 구조체가 만들어졌습니다.

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

나는 그것을 완벽하게 이해합니다. 이제 개체를 만들어야합니다. ;

(*ret).op = op; 

그리고 삭제 개체 : - ">"오페라의 말을 동일

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

는 내가 아는

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

기능 (적용)은 기본 기능과 동일하게 보입니까? 배열입니까?

Operation* ret = new Operation; 

개체는 단지 함수입니까?

+0

당신은 돈

void break(Operation& o) 

잘못 구문은,이 확인 될 것입니다) 확인

(*ret).op = op; 

D있을 삭제합니다 잘못된 구문

(*ret) op = op; 

입니다 "내부에 함수가있는 구조체"가 있으면 _pointer_와 같은 구조체가 있습니다. 한 멤버, 두 개가 아닌 세 개의 인수를 취하는 함수를 가리키는 멤버. 마지막 함수는 전혀 컴파일 할 수 없습니다 : break는 키워드이며 참조를 삭제할 수 없습니다. 당신은'->'에 대한 설명이 분명하지 않고 ... 결국 나는 당신의 질문을 정말로 이해하지 못합니다. – Mat

+0

당신이 여기에서 묻고있는 것을 말하기는 어렵지만, 정말로 당신이'double (* apply) (double, double)을 원한다고 생각합니다; // 두 번 두 번 걸립니다. '쓴 것은 두 개의 double을 취하지 않으며 두 개의 double과 Operation 포인터가 필요합니다. – jahhaj

+0

-> 연산자는 포인터를 존중합니다. – Monster

답변

0

당신의 비전은 작업과 일치하지 않는 것 같다 ...

A) 구조 char op;는 "개체"가 될 수 없습니다. 그것은 "가치", 흠 ... 이지만 char *op;일지도 몰라?

B) 어레이.

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

아니요. 단일 값에 대한 포인터를 만들었습니다.

) 연산자.이 '이

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);