-1

C で書かれたサンプル コードをダウンロードしましたが、1 つの命令がわかりません。さらに、コードをコンパイルしようとすると、コンパイラは、理解できない行でエラーをスローします。

コード:

// Global vars
static int getting_text = 0;
static char *the_text;  // Definition Part
static void (*text_entered)();  // Definition Part 2


// method
int add_text(unsigned char key)
{
  char msg[] = "x";
  int len;

  if(!getting_text) return 0;
  if(key==8) /* backspace */
  {
    len = strlen(the_text);
    the_text[len-1] = '\0';
  }
  else if(key==13 || key==9) // cr or tab ends
  {
    getting_text = 0;
    text_entered(the_text); // Execution Part
  }
  else
  {
    msg[0] = key;
    strcat(the_text, msg);
  }

  glutPostRedisplay();

  return 1;
}

コンパイラは、メソッドの呼び出しに引数が多すぎるというエラーをスローします。しかし、それが static void (*xxx)() のメソッドであるか、または他のものであるかはわかりません。

前もって感謝します。

4

1 に答える 1

2

編集: 以下は C++ にのみ適用されます。C コンパイラの代わりに g++ またはその他の C++ コンパイラを使用しましたか?

text_entered は、引数を取らない関数への関数ポインタであるため、文字ポインタを渡しているためエラーになります。に変更する必要があると思います。

static void (*text_entered)(char*);

もちろん、これは text_enterered が実際に char* 引数を取る関数に設定されていることを前提としており、単に間違って呼び出されているだけではありません。

于 2012-10-12T23:15:05.697 に答える