私のエンジンのコアに取り組んでいます。私はMicrosoft Visual C++ Expressに深刻なリンク問題があります。C++リンクの名前空間とインクルードファイルでのエラー
簡単にするために、問題を引き起こすのはこれらの2つのヘッダーファイルで、各ヘッダーファイルには異なる識別子の名前空間があります。これらのファイルは、実際には互いに組み入れられています。コンパイル時にエラーは発生しませんが、リンク時に "Xは既にA.objで定義されています"というエラーが表示されます。例を以下に提供される:
HEADER 1
#ifndef HEADER1_H
#define HEADER1_H
#include "header2.h"
namespace Core{
int x, y, z;
}
#endif
ヘッダ2
#ifndef HEADER2_H
#define HEADER2_H
#include "header1.h"
namespace GUI{
int x, y, z;
}
#endif
私はというエラーを取得しているが起こってしまうことのx、yおよびz変数はすでに作成された最初の.objファイルで定義されていました。私は変数が異なる名前空間から来ているので、衝突することはできないと仮定しました。私はヘッダーガードも持っているので、ヘッダーファイルは複数回含まれていないようです。
とにかく、どんな種類のヘルプやアドバイスをいただければ幸いです。私は約3日間このことに固執しています:P。また、十分な情報を提供していない場合は、私の現在のコードが非常に長いことを知らせてください。
乾杯、 ジョーイ
短い答えは、お互いを含むヘッダーがないことです。 –
申し訳ありませんが、私はそれがいくつかの問題につながるかもしれないという気持ちを持っていましたが、ヘッダー1のcppにヘッダー2へのアクセス権があり、逆も同様です。それとも私のデザインに深刻な欠陥がありますか? –
彼らはお互いに「直接」アクセスすることはできません。だから、あなたはどこかで[前方宣言](http://en.wikipedia.org/wiki/Forward_declaration)が必要になるでしょう。 –