Повторяющийся символ при компиляции C ++ на Mac Netbeans 11 - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь скомпилировать некоторый унаследованный код, но продолжаю получать ошибки, такие как:

duplicate symbol _Wox in:
    build/Debug/GNU-MacOSX/BOFM.o
    build/Debug/GNU-MacOSX/IM.o

В общей сложности я получаю 260 таких ошибок.

Для каждой ошибки используется 4 файла, 2 файла реализации и соответствующие им заголовочные файлы. Заголовки содержат только объявления переменных и функций, в то время как файлы реализации имеют только определения функций и #include.

Если переменная используется в нескольких файлах реализации, заголовок для «главного» (основного) файла имеет нормальное объявление, тогда как все остальные заголовки используют 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. Я могу предоставить любые недостающие необходимые данные.

...