ヘッダーに変数を定義して、複数のファイルで使用できるようにしたいです。たとえば、変数a
をどこかに定義し、p1.cpp と p2.cpp の両方で使用/変更できるようにする
これは、私がやろうとしていることの 3 つの単純なファイルの例です。
// vars.hpp
#ifndef VARS_HPP
#define VARS_HPP
int a = 1;
float b = 2.2;
void double_vars();
#endif
// vars.cpp
#include "vars.hpp"
void double_vars () {
a *= 2;
b *= 2;
}
// vars_main.cpp
#include <cstdio>
#include "vars.hpp"
int main () {
printf("a: %d; b: %f\n", a, b);
double_vars();
printf("a: %d; b: %f\n", a, b);
}
ここで、上記を次のようにコンパイルします。
g++ -Wall -W -g vars.cpp vars_main.cpp -o vars && ./vars
次のエラーが表示されます。
/tmp/ccTPXrSe.o:(.data+0x0): multiple definition of `a'
/tmp/ccnc1vof.o:(.data+0x0): first defined here
/tmp/ccTPXrSe.o:(.data+0x4): multiple definition of `b'
/tmp/ccnc1vof.o:(.data+0x4): first defined here
なぜこれが起こるのか誰かが私に説明できますか?私はヘッダーファイルにガードを持っているので、私が理解している限り、それは一度だけ含める必要があるため、複数の宣言があってはなりません