Связывание множественного включения в 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", эти файлы не будут компилироваться. Пожалуйста, помогите мне понять, что я делаю неправильно. Большое спасибо!