【C++】#Includeについて 1つ以上の複数回定義されているシンボルがみつかりました。
問題
いろんなクラスの関数・変数を呼ぶために#Includeを記載するが、どうやら何度も定義されている関数があるみたい。 Includeループ地獄に入ってしまった。
そもそもIncludeとは
他のクラスで宣言されている関数・変数などを今実装中の箇所でも使用するために、その関数宣言を実装箇所で認識させるためのものと思っている。
なんでもincludeすると、指定したファイルがそのまま展開されるとのことで、includeしたファイルの中でさらにincludeしているなんてことはざらにあると思われる。
解決策
pragma once
ほとんどの場合最初からこれが定義されていると思うので、これで直ることはあまりないと思うが、これを書くだけで同じヘッダーファイルは一度しか展開されなくなり、重複定義が解決できるかも。
ちなみにインクルードガードというものもあるようです。(以下のような)
#ifndef HOGE #define HOGE #endif
pragma onceを使っていれば不要な気がします。意味あるのか?
externを使う
そもそもincludeが必要かを考える。
externを関数や変数の頭につけると、他のファイルで宣言されている関数や変数を使うことができる。
global.h
int globalInt;
local.h
int localInt; extern int globalInt;
上記のようにExternを使えばIncludeせずとも関数や変数が使えるようになる。