9

私は信頼できるデータ転送プロトコルを作成しており、関数のプロトタイプを持っています

void tolayer5(int, char data[]);

とともにstructs

struct msg {
  char data[20];
};

struct pkt {
   int seqnum;
   int acknum;
   int checksum;
   char payload[20];
};

そして、この形式で関数を呼び出すと:

tolayer5(A, packet.payload);

とはどこAにあり、「 への未定義の参照です。ここに何が欠けているかを教えてもらえますか? 」というエラーが表示されます。intpacket.payloadstruct pkt'tolayer5(int, char*)'

void tolayer5(int AorB, char data[])
{
  int i;
  if (TRACE>2)
  {
     printf("TOLAYER5: data received:");
     for (i=0; i<20; i++)
        printf("%c",data[i]);
     printf("\n");
  }
}

原題に協力してくださった皆様、ありがとうございました!:)しかし、それを修正しようとすると、配列内の文字のアドレス指定が間違っていることに関係があると思われる無限ループに遭遇しました(Cこのようにしてからしばらく経ちました。見つけるのを手伝ってもらえますかどこで無限ループを作成していますか?

上記のコードを現在使用しているものに更新しました。主な変更点は関数にあることに注意してください。

void tolayer5(int AorB, char data[])

そして、関数内のこの行:printf("%c",msgReceived.data[i]);今はただ:

printf("%c",data[i]);
4

3 に答える 3

13

tolayer5() を実装する obj ファイルとリンクする必要があるようです

更新: 関数宣言が実装と一致しません:

      void tolayer5(int AorB, struct msg msgReceived)
      void tolayer5(int, char data[])

そのため、コンパイラはそれらを 2 つの異なる関数として扱います (c++ を使用しています)。また、main() で呼び出した実装が見つかりません。

于 2013-10-16T01:18:28.983 に答える