Прежде всего, спасибо за всю замечательную информацию на этом сайте. Это всегда мой первый порт для проблем с программированием. К сожалению, я не смог найти ни одного из упомянутых в других постах решений о похожих проблемах.
Я привык кодировать очень большие симуляции, но недавно получил ошибку, с которой раньше не сталкивался. Я сократил код до нескольких строк - ради отладки и до сих пор понимаю проблему. То есть:
Когда я нажимаю build (используя QTcreator и C ++), я получаю следующую ошибку:
":: ошибка: дубликат символа _GENERATOR в randoms.o и main.o"
":: error: collect2: ld вернул 1 состояние выхода"
Форма для чтения других постов. Я знаю, что это может быть результатом # включения чего-то дважды, но я этого не делал.
Вот пример кода, который генерирует эту ошибку:
Код состоит из randoms.h, randoms.cpp и main.cpp
randoms.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
randoms.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);
}
}
main.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;
}
Возможно, я просто делаю что-то действительно глупое, но я не могу понять, почему что-то будет дублироваться. Любая помощь будет высоко ценится.
Заранее спасибо