gpt4 book ai didi

c++ - MTRand 在编译时产生错误

转载 作者:行者123 更新时间:2023-11-28 08:00:32 30 4
gpt4 key购买 nike

我在我定义的类中使用 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 类中有一个默认种子,所以我看不出问题出在哪里。

最佳答案

除了在您的代码中包含具有正确文件路径的 mtrand.h header 之外,您还应该将 mtrand.cpp 添加到您的项目中,以便它与您程序的其他 .cpp 文件。

如果您使用的库不提供任何预编译的二进制文件,如 .lib、.dll 或 .a 文件,那么是的,您必须自己编译库的源代码(工作量不大吧?)为了让链接器开心。但是如果库确实伴随着这样的预编译二进制文件,那么你应该告诉链接器它需要链接哪些文件才能找到库头文件中的声明是如何实际实现的,因为链接器不知道否则.实际链接预编译二进制文件的方式取决于您的开发环境。当然,您应该在这两种情况下都包含头文件,以告诉编译器 MTRand_int32 和其他新标识符的含义。

关于c++ - MTRand 在编译时产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11603637/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com