problems using random number generator

I am using the boost library to create random numbers in a function. Here is the function I have written which is used in my main program:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "stdafx.h"
using namespace std;
#include "dm_Steps.h"
#include "dm_Tracks.h"
#include "dm_Data.h"
#include <boost/random/linear_congruential.hpp>
#include <boost/random/uniform_01.hpp>
#include <boost/random/normal_distribution.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/variate_generator.hpp>
#include <boost/random.hpp> 
#include "dm_gaus.h"


dm_Data gaussian_generator(dm_Data data_base_1, int k_proton_flux, int phantom_size)
{
	for(int n = 0; n < k_proton_flux; n++)
	{
		float mu = 0;
		float sigma = 0.5;
		boost::variate_generator< boost::mt19937, boost::normal_distribution<> > generator(boost::mt19937(time(0)), boost::normal_distribution<>(mu, sigma));

		for(int i=0; i < data_base_1.m_data.size(); i++)
		{
			float rand_num1 = gen_normal_3(generator);

			//data_base.m_data.at(i).m_track.at(0).m_ypos = rand_num1;
			for(int j=0; j < data_base_1.m_data.at(i).m_track.size(); j++)
			{
				data_base_1.m_data.at(i).m_track.at(j).m_ypos = data_base_1.m_data.at(i).m_track.at(j).m_ypos + rand_num1;
			}
		}

		for(int i=0; i < data_base_1.m_data.size(); i++)
		{
			float rand_num2 = gen_normal_3(generator);

			if (rand_num2 >= phantom_size)
				rand_num2 = phantom_size - 1;

			//data_base.m_data.at(i).m_track.at(0).m_zpos = rand_num2;
			for(int k = 0; k < data_base_1.m_data.at(i).m_track.size(); k++)
			{
				data_base_1.m_data.at(i).m_track.at(k).m_zpos = data_base_1.m_data.at(i).m_track.at(k).m_zpos + rand_num2;
			}
		}
		return data_base_1;
	}


The function requires the use of a header file (#include "dm_gaus.h"):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template<class T>

double gen_normal_3(T &generator)
{
	return generator();
}

// Version that fills a vector
template<class T>
void gen_normal_3(T &generator, std::vector<double> &res)
{
	for(size_t i = 0; i < res.size(); i++)
		res[i]=generator();
}


When I try to compile my main program I get the following errors for my header file:
Error 24 error C1506: unrecoverable block scoping error
Error 23 error C2951: template declarations are only permitted at global

I also get the following errors for my random number generator function:
Error 17 error C3861: 'gen_normal_3': identifier not found
Error 20 error C3861: 'gen_normal_3': identifier not found

Why am I getting these errors?


Topic archived. No new replies allowed.