c++ - 在 Mac Netbeans 11 上编译 C++ 时出现重复符号
问题描述
我正在尝试编译我继承的一些代码,但我不断收到错误,例如:
duplicate symbol _Wox in:
build/Debug/GNU-MacOSX/BOFM.o
build/Debug/GNU-MacOSX/IM.o
总共,我收到了 260 个这样的错误。
对于每个错误,涉及到 4 个文件,2 个实现文件及其各自的头文件。标头仅包含变量和函数声明,而实现文件仅包含函数定义和#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 运行。我可以提供任何缺少的所需详细信息。
解决方案
推荐阅读
- java - Java - 创建股票 JPanel 期间的问题
- wordpress - 如何创建 .htaccess 文件以在 Docker 中使用路径重写 Wordpress URL?
- java - 在 Java 中进行铸造 - (Parent) 这是什么意思?
- swift - 如何通过网络抓取获取列表元素?
- python - 具有多个标题的 CSV。如何维护参考标题行
- ms-access - 如何修改共享点文档库中的 Access DB 文件
- bash - Bash:找到某个分区所在的磁盘并将结果放入变量中
- pycharm - PyCharm 在文档字符串中是否支持 Markdown?
- python - 使用 Openpyxl 保存启用宏的 Excel 工作簿 (.xlsm) 时出现问题。Excel 引发错误并开始修复工作簿
- cakephp - 翻译不起作用 帮助 请帮助 Cake Php