まず第一に、このサイトのすべての素晴らしい情報に感謝します。それは常にプログラミングの問題に対する私の最初の寄港地です。残念ながら、同様の問題について他の投稿で言及されている解決策はどれもうまくいかなかったようです。
私は非常に大規模なシミュレーションのコーディングに慣れていますが、最近、これまでに遭遇したことのないエラーが発生しました。私はコードを数行に減らしました-デバッグのために、そして問題を抱えています。あれは:
(QTcreatorとC ++を使用して)ビルドをクリックすると、次のエラーが発生します。
"::エラー:randoms.oとmain.oでシンボル_GENERATORが重複しています"
"::エラー:collect2:ldが1つの終了ステータスを返しました"
他の投稿を読んでいるフォームこれは#includeの結果である傾向があることを私は知っていますが、私はこれをしていません。
このエラーを生成するコードの例を次に示します。
コードは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;
}
たぶん私は本当にばかげたことをしているだけなのかもしれませんが、なぜ何かが複製されるのか理解できません。どんな助けでも大歓迎です。
前もって感謝します