Связывание множественного включения в C++

Я написал код C++, используя 3 файла. Вот имена файлов и их общая структура:

      graph.h:

#ifndef GRAPH_H
#define GRAPH_H

/*some header files included here*/

using namespace std;
const int max = 1000;
int var;

/*class Graph defined here*/

#endif
      graph.cpp:

#include "graph.h"
/*class Graph functions implemented here*/
      main.cpp:

#include "graph.h"
using namespace std;
/*main() function implemented here*/

Я использую следующие команды для компиляции кода:

      g++ -std=c++11 -Wno-deprecated -O3 -c  main.cpp
g++ -std=c++11 -Wno-deprecated -O3 -c  graph.cpp
g++ -O3  main.o graph.o -o myProg

Первые две команды выполняются нормально, но третья команда (шаг ссылки) выдает следующую ошибку:

      graph.o:(.bss+0x0): multiple definition of `var'
main.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status

Я использовал защиту заголовков в graph.h. Кроме того, если я уберу "graph.h" из "graph.cpp" и "main.cpp", эти файлы не будут компилироваться. Пожалуйста, помогите мне понять, что я делаю неправильно. Большое спасибо!

0 ответов

Другие вопросы по тегам