簡體   English   中英

MTRand在編譯時產生錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM