首先,感谢您在本网站上提供的所有重要信息。它始终是我解决编程问题的第一站。不幸的是,我找不到其他帖子中提到的类似问题的解决方案似乎都不起作用。
我习惯于编写非常大的模拟,但最近遇到了一个我以前没有遇到过的错误。我已将代码减少到几行 - 为了调试,我仍然遇到问题。那是:
当我单击构建(使用 QTcreator 和 C++)时,我收到以下错误:
“:: 错误:randoms.o 和 main.o 中的重复符号 _GENERATOR”
“:: 错误:collect2: ld 返回 1 个退出状态”
阅读其他帖子的表格我知道这往往是#include-ing事情两次的结果,但我没有这样做。
以下是一些产生此错误的代码示例:
代码由 randoms.h、randoms.cpp 和 main.cpp 组成
随机数.h:
#ifndef RANDOMS_H
#define RANDOMS_H
#include <iostream>
#include <iomanip>
#include <ctime>
#include <boost/random.hpp>
#include <stdio.h>
#include <stdlib.h>
const double price = 127.4;
boost::mt19937 GENERATOR(static_cast<unsigned> (std::time(0)));
int randIntRange(int low, int high);
double randDoubleRange(double low, double high);
void d_Range(std::vector<double> *range, double low, double high, double breaks);
#endif // RANDOMS_H
随机数.cpp:
#include"randoms.h"
int randIntRange(int low, int high) {
boost::uniform_int<> dist(low, high);
boost::variate_generator<boost::mt19937&, boost::uniform_int<> > range(GENERATOR, dist);
return range();
}
double randDoubleRange(double low, double high) {
boost::uniform_real<> dist(low, high);
boost::variate_generator<boost::mt19937&, boost::uniform_real<> > range(GENERATOR, dist);
return range();
}
void d_Range(std::vector<double> *range, double low, double high, double breaks) {
double interval;
interval = double(high - low)/double(breaks);
for (double i=low; i < high; i+=interval) {
range->push_back(i);
}
}
主.cpp:
#include"randoms.h"
int main() {
double a = 156;
double b = 14256;
std::cout << a << " divided by " << b << " close to " << ((a/b)*randDoubleRange(0.9,1.1)) << std::endl;
return 0;
}
也许我只是在做一些非常愚蠢的事情,但我不知道为什么会重复任何事情。任何帮助将非常感激。
提前致谢