[英]MTRand produces an error on compilation
我在定義的類中使用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;
}
我只想測試它是否可以編譯,所以我創建了一個主功能,該功能完全不執行任何操作:
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類中存在默認的種子,所以我看不出問題出在哪里。
除了使用正確的文件路徑在代碼中包含mtrand.h
標頭之外,您還應該將mtrand.cpp
添加到項目中,以便它與程序的其他.cpp文件一起編譯。
如果您使用的庫沒有提供任何預編譯的二進制文件,例如.lib,.dll或.a文件,那么可以,您必須自己編譯該庫的源代碼(工作量不大嗎?),以便使鏈接器開心。 但是,如果庫確實與此類預編譯的二進制文件一起存在,那么您應該告訴鏈接程序它需要鏈接到哪些文件,以便能夠找到庫頭文件中的聲明實際上是如何實現的,因為鏈接程序不知道其他方法。 實際如何鏈接預編譯的二進制文件取決於您的開發環境。 當然,在兩種情況下都應包含頭文件,以告訴編譯器MTRand_int32
和其他新標識符的含義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.