【发布时间】:2013-10-16 01:14:00
【问题描述】:
我正在做一个可靠的数据传输协议并且有函数原型
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 是int 和packet.payload 是struct 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]);
【问题讨论】:
-
这是一个链接错误,你确定你也在
void tolayer5(int, char data[]);的实现中链接吗? -
是你项目中实现tolayer5的c文件。
-
重新编辑:您的原型与其实现不兼容。 char[] vs struct msg.
-
您实际上引用了三种不同类型的函数,即 char*、struct msg 和 struct pkt。你可以使用任何,但正如@DanielSloof 所说,它必须与原型匹配。
-
为什么要同时标记[C]和[C++]。这些语言之间的链接问题可能完全不同。是 C 还是 C++ 的问题?
标签: c data-structures