我有两个用C语言编写的项目:客户端和服务器端,两者都包含许多常见的全局变量。我想编写一个类(使用接口Transaction的clientbot和serverbot),它将调用每个项目的main函数。
我已将所有常见的全局变量移动到头文件中,并将其包含在两个项目中。但是在构建它时会引发我的链接错误。
错误3错误LNK2005:“int g_nBytestoSend”(?g_nBytestoSend @@ 3HA)已在transimpl.obj agentBot.obj中定义
有人可以建议我应该做什么吗?
答案 0 :(得分:2)
您不应将实际变量放在标题中,只应将extern
声明。将实际变量放在单独的.c
或.cpp
文件中并与之链接。
在标题中(让我们称之为globals.h
),您将声明:
extern int g_nBytesToSend;
然后你创建一个新的代码文件来保存实际的变量(比如global.c
):
int g_nBytesToSend;
假设您有三个代码文件server.c
,client.c
和bot.c
,并且您正在使用gcc。你会建立这样的:
gcc -o server.o -c server.c
gcc -o client.o -c client.c
gcc -o bot.o -c bot.c
gcc -o globals.o -c globals.c
gcc -o mybot server.o client.o bot.o globals.o
(尽量保持全局变量的数量。)
答案 1 :(得分:0)
您是否protect使用ifndef的头文件?