C 编译 - "undefined reference to"?

标签 c data-structures

我正在做一个可靠的数据传输协议(protocol)并有函数原型(prototype)

void tolayer5(int, char data[]);

使用结构

struct msg {
  char data[20];
};

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

当我以这种格式调用函数时:

tolayer5(A, packet.payload);

A 是一个 intpacket.payload 是一个 struct pkt,我得到错误“对 'tolayer5(int, char*)' 的 undefined reference 。你能帮我看看我在这里遗漏了什么吗?

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

最佳答案

似乎您需要链接到实现 tolayer5() 的 obj 文件

更新: 您的函数声明与实现不匹配:

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

因此编译器会将它们视为两个不同的函数(您使用的是 C++)。它找不到您在 main() 中调用的实现。

关于C 编译 - "undefined reference to"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19393700/

相关文章:

algorithm - 在 O(nk) 时间复杂度内合并大小为 n 的 k 个已排序数组

java - 链表移除

c - 我如何阅读这个复杂的 C 声明?

c - OpenCL 内核参数结构具有零值

c - fseek ftell 读取相同的输入

C 在函数中将 int 转换为 double

c - 为什么我的 C 程序在使用 for 循环时只产生零答案?

c - 链接列表没有给出所需的输出

data-structures - 如何为 Bitvector 实现自定义切片

java - 遍历 Java 中的链表?