定義したクラス内でMTRand ( http://www.bedaux.net/mtrand/の Mersenne Twister 乱数ジェネレーター) を使用しています。コンパイルしようとすると、デコードできない予期しないエラーが発生します。私は初心者の C++ プログラマーです。
私のコードの関連部分は次のとおりです。
#include<iostream>
#include<vector>
#include<deque>
#include<cmath>
#include "./mtrand/mtrand.h"
using namespace std;
class mp{
long double store;
deque< vector<long double> > stack;
long double boundary;
long double dt;
long double time;
MTRand_open random;
long int random_seed;
public:
void initialize(long int, long double, long double);
long double get_state(); // return the state at position int
void update();
friend long double A(mp*);
friend long double D(mp*);
long double normal();
vector <long double> viewCurrent();
};
次に、呼び出された場合、乱数ジェネレーターのシードを設定する関数があります。
void mp::initialize(long int rand_seed_input, long double bdry_in, long double dt_in){
time = 0;
dt = dt_in;
random_seed = rand_seed_input;
random.seed(random_seed);
boundary = bdry_in;
}
これがコンパイルされるかどうかをテストしたいだけなので、まったく何もしない main 関数を作成します。
int main(){
return 0;
}
コンパイル時にエラーが発生する
Undefined symbols:
"MTRand_int32::seed(unsigned long)", referenced from:
mp::initialize(int, long, long double, long double)in ccJylsHh.o
"MTRand_int32::p", referenced from:
MTRand_int32::rand_int32() in ccJylsHh.o
MTRand_int32::rand_int32() in ccJylsHh.o
MTRand_int32::rand_int32() in ccJylsHh.o
"MTRand_int32::state", referenced from:
MTRand_int32::rand_int32() in ccJylsHh.o
"MTRand_int32::gen_state()", referenced from:
MTRand_int32::rand_int32() in ccJylsHh.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
このエラーが何を意味するのか、どのように削除すればよいのかわかりません。
私が理解していることから、MTRandはシードを初期化する方法を理解できないということです...しかし、クラスMTRand内にデフォルトのシードがあるため、何が問題なのかわかりません。