継承したコードをコンパイルしようとしていますが、次のようなエラーが発生し続けます。
duplicate symbol _Wox in:
build/Debug/GNU-MacOSX/BOFM.o
build/Debug/GNU-MacOSX/IM.o
合計で、これらのエラーが 260 件発生しています。
エラーごとに、2 つの実装ファイルとそれぞれのヘッダー ファイルの 4 つのファイルが関係しています。ヘッダーには変数と関数の宣言のみが含まれ、実装ファイルには関数の定義と#include
's のみが含まれます。
変数が複数の実装ファイルで使用されている場合、「マスター」(メイン) ファイルのヘッダーには通常の宣言があり、他のすべてのヘッダーはextern
宣言で使用されます。
次の例では、変数 Wox はマスター ヘッダーで宣言されていませんがIM.hpp
、宣言のあるヘッダーに含まれています。マスターとスレーブの両方の実装ファイルは、同じ Wox 変数を使用します。
マスターヘッダー (BOFM.hpp)
#ifndef BOFM_HPP
#define BOFM_HPP
double g = 9.80665;
double R = (8.205 * pow(10.0, (-5.0)));
double dLime = 3340.0;
double dDolomite = 3250.0;
... [no Wox declaration]
void initFirstMin();
void calcBOF();
int main(int argc, char *argv[]);
#endif
マスター実装 (BOFM.cpp)
#define _USE_MATH_DEFINES
#include <math.h>
#include "BOFM.hpp"
#include "IM.hpp"
...
void initFirstMin(){
...
Bs.push_back(Wox.at(x - 1).at(2) / Wox.at(x - 1).at(1));
...
}
int main(int argc, char *argv[]){
...
initFirstMin();
...
}
スレーブ ヘッダー (IM.hpp)
#ifndef IM_HPP
#define IM_HPP
double MHm;
std::vector<double> WiHm (static_cast<int> (4), 0);
double Sulphur;
...
std::vector< std::vector<double> > Wox;
...
void initST();
void initFT();
#endif
スレーブの実装 (IM.cpp)
#include <vector>
#include "IM.hpp"
...
void initST()
{
Wox.push_back({ 33.5, 17.5, 27, 5, 13.5 });
Wox.push_back({ 31.5, 19, 27, 3.5, 14.5 });
Wox.push_back({ 29, 20.5, 28, 3, 14.6 });
Wox.push_back({ 28, 20.5, 32, 3, 14 });
}
...
コンパイラは C++11 に従って実行されます。不足している必要な詳細を提供できます。