2012-09-28 21 views
21

मैं कुछ सी ++ कोड को सी में बदलने की कोशिश कर रहा हूं और मुझे समस्याएं आ रही हैं। क्या संरचना के अंदर एक फ़ंक्शन को परिभाषित करना संभव है?सी संरचना के अंदर एक समारोह को परिभाषित करने के लिए संभव है?

इस तरह

:

typedef struct { 
    double x, y, z; 
    struct Point *next; 
    struct Point *prev; 
    void act() {sth. to do here}; 
} Point; 

उत्तर

32

नहीं, आप एक समारोह एक struct भीतर सी

में परिभाषित नहीं किया जा सकता

आप एक struct में एक समारोह सूचक हो सकता है, हालांकि, लेकिन एक समारोह सूचक होने से बहुत अलग है सी ++ में एक सदस्य फ़ंक्शन, अर्थात् this सूचकांक struct उदाहरण के लिए कोई अंतर्निहित this सूचक नहीं है।

काल्पनिक उदाहरण (ऑनलाइन डेमो http://ideone.com/kyHlQ):

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

struct point 
{ 
    int x; 
    int y; 
    void (*print)(const struct point*); 
}; 

void print_x(const struct point* p) 
{ 
    printf("x=%d\n", p->x); 
} 

void print_y(const struct point* p) 
{ 
    printf("y=%d\n", p->y); 
} 

int main(void) 
{ 
    struct point p1 = { 2, 4, print_x }; 
    struct point p2 = { 7, 1, print_y }; 

    p1.print(&p1); 
    p2.print(&p2); 

    return 0; 
} 
7

C में यह एक struct के अंदर एक विधि को परिभाषित करने के लिए अनुमति नहीं है:

इस सूत्र देखें। इस प्रकार आप एक struct के अंदर एक समारोह सूचक निर्धारित कर सकते हैं:

typedef struct { 
    double x, y, z; 
    struct Point *next; 
    struct Point *prev; 
    void (*act)(); 
} Point; 

आप जब भी आप struct का दृष्टांत एक विशेष समारोह के लिए सूचक आवंटित करने के लिए होगा।

2

विचार है कि संरचना के अंदर एक फ़ंक्शन को पॉइंटर डालना है। फ़ंक्शन को तब संरचना के बाहर घोषित किया जाता है। यह सी ++ में एक वर्ग से अलग है जहां कक्षा के अंदर एक समारोह घोषित किया जाता है।

उदाहरण के लिए: यहां से कोड चोरी: http://forums.devshed.com/c-programming-42/declaring-function-in-structure-in-c-545529.html

struct t { 
    int a; 
    void (*fun) (int * a); 
} ; 

void get_a (int * a) { 
    printf (" input : "); 
    scanf ("%d", a); 
} 

int main() { 
    struct t test; 
    test.a = 0; 

    printf ("a (before): %d\n", test.a); 
    test.fun = get_a; 
    test.fun(&test.a); 
    printf ("a (after): %d\n", test.a); 

    return 0; 
} 

जहां test.fun = get_a; struct में सूचक के लिए समारोह प्रदान करती है, और test.fun(&test.a); यह कहता है।

1

आप सी प्रोग्रामिंग भाषा में एक स्ट्रक्चर में फ़ंक्शन पॉइंटर को परिभाषित कर सकते हैं जो सी ++ से अलग है।

11

हालांकि आपके पास संरचना में फ़ंक्शन पॉइंटर हो सकता है।

typedef struct cont_func { 
    int var1; 
    int (*func)(int x, int y); 
    void *input; 
} cont_func; 


int max (int x, int y) 
{ 
    return (x>y)?x:y; 
} 

int main() { 
    struct cont_func T; 

    T.func = max; 

} 
: लेकिन इस तरह से

आप इसे इस तरह

उदाहरण में परिभाषित कर सकते हैं