需要怎么用啊?我这么弄老编译出错,可能比较低级的错误,高手请指教,谢谢!
(想做一个产生正态分布变量的类)
GaussianRNG.h如下
class GaussianRNG
{
public:
GaussianRNG(void);
int iset;
double gset;
Random r1,r2;
double Next();
~GaussianRNG(void);
};
GaussianRNG.cpp如下#include "StdAfx.h"
#include ".\gaussianrng.h"
#include <cstdlib>
#include <ctime>GaussianRNG::GaussianRNG(void)
{
r1 = new Random(unchecked((int)DateTime.Now.Ticks));
r2 = new Random(~unchecked((int)DateTime.Now.Ticks)); iset=0;
}GaussianRNG::Next()
{
double fac, rsq, v1, v2;
if (iset == 0) {
do {
v1 = 2.0 * r1.NextDouble() - 1.0;
v2 = 2.0 * r2.NextDouble() - 1.0;
rsq = v1*v1 + v2*v2;
} while (rsq >= 1.0 || rsq == 0.0);
fac = Math.Sqrt(-2.0*Math.Log(rsq)/rsq);
gset = v1*fac;
iset = 1;
return v2*fac;
} else {
iset = 0;
return gset;
}
}GaussianRNG::~GaussianRNG(void)
{
}
(想做一个产生正态分布变量的类)
GaussianRNG.h如下
class GaussianRNG
{
public:
GaussianRNG(void);
int iset;
double gset;
Random r1,r2;
double Next();
~GaussianRNG(void);
};
GaussianRNG.cpp如下#include "StdAfx.h"
#include ".\gaussianrng.h"
#include <cstdlib>
#include <ctime>GaussianRNG::GaussianRNG(void)
{
r1 = new Random(unchecked((int)DateTime.Now.Ticks));
r2 = new Random(~unchecked((int)DateTime.Now.Ticks)); iset=0;
}GaussianRNG::Next()
{
double fac, rsq, v1, v2;
if (iset == 0) {
do {
v1 = 2.0 * r1.NextDouble() - 1.0;
v2 = 2.0 * r2.NextDouble() - 1.0;
rsq = v1*v1 + v2*v2;
} while (rsq >= 1.0 || rsq == 0.0);
fac = Math.Sqrt(-2.0*Math.Log(rsq)/rsq);
gset = v1*fac;
iset = 1;
return v2*fac;
} else {
iset = 0;
return gset;
}
}GaussianRNG::~GaussianRNG(void)
{
}
.net 下的类必须声明为指针(新的C++/CLI为Handle ^)所以Random r1=new Random(~unchecked((int)DateTime.Now.Ticks));就100%的错了.在编译时要加/clr参数.最后是在开头要有最起码的#using <mscorlib.dll>
#using <System.dll>
using namespace System;