我正在做一个可靠的数据传输协议(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
是一个 int
而 packet.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/