C++コードをCに変換しようとしていますが、問題が発生しています。 構造内で関数を定義することは可能ですか?C構造内で関数を定義することは可能ですか?
typedef struct {
double x, y, z;
struct Point *next;
struct Point *prev;
void act() {sth. to do here};
} Point;
C++コードをCに変換しようとしていますが、問題が発生しています。 構造内で関数を定義することは可能ですか?C構造内で関数を定義することは可能ですか?
typedef struct {
double x, y, z;
struct Point *next;
struct Point *prev;
void act() {sth. to do here};
} Point;
いいえ、あなたはあなたががstruct
で関数ポインタを持っていますが、関数ポインタを持つことが非常に異なっていることができますC.
でstruct
内の関数を定義することはできません。このよう
C++のメンバ関数、つまり暗黙的にインスタンスへのポインタ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;
}
いいえ、Cとの間の基本的な違い(の1つ)であるC.
における構造体の内部関数を宣言することは不可能ですおよびC++。 C
では、struct
内部のメソッドを定義することが許可されていないhttp://forums.devshed.com/c-programming-42/declaring-function-in-structure-in-c-545529.html
:
は、このスレッドを参照してください。次のように構造体の内部の関数ポインタを定義することができます。typedef struct {
double x, y, z;
struct Point *next;
struct Point *prev;
void (*act)();
} Point;
あなたはstruct
をインスタンス化するたびに、特定の関数へのポインタを割り当てる必要があります。
考え方は、構造体内の関数へのポインタを置くことです。関数は構造体の外部で宣言されます。これは、関数がクラス内で宣言されているC++のクラスとは異なります。例えば
: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;
は構造体のポインタに機能を割り当て、test.fun(&test.a);
はそれを呼び出す:ここからコードを盗みました。
関数ポインタは、C++とは異なるCプログラミング言語の構造体でのみ定義できます。
あなたは構造体に関数ポインタを持つことができます。
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;
}
:しかし、この方法で
あなたはこのよう
例では、それを定義することができません