Как я могу обрабатывать глобальные переменные, которые являются общими для двух проектов? - PullRequest
0 голосов
/ 15 марта 2011

У меня есть два проекта, написанных на C: на стороне клиента и на стороне сервера, оба из которых содержат много общих глобальных переменных. Я хочу написать класс (clientbot и serverbot с использованием интерфейса Transaction), который будет вызывать основную функцию каждого проекта.

Я переместил все общие глобальные переменные в заголовочный файл и включил их в оба проекта. Но при сборке это выдает ошибку компоновки.

Ошибка 3 Ошибка LNK2005: «int g_nBytestoSend» (? G_nBytestoSend @@ 3HA) уже определено в transimpl.obj agentBot.obj

Кто-нибудь может подсказать, что мне делать?

Ответы [ 2 ]

2 голосов
/ 15 марта 2011

Вы не должны помещать фактические переменные в заголовок, только 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

(Постарайтесь, чтобы количество глобалов было небольшим.)

0 голосов
/ 15 марта 2011

Вы защитили файл заголовка с помощью ifndef?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...