Я тестировал игровой движок, который строил, генерируя объекты в случайных положениях, когда наткнулся на эту ошибку, которую я не понимаю.
"foo.h":
#include <random>
#include <chrono>
#include <functional>
namespace foo {
std::default_random_engine r_gen;
auto r_seed = std::chrono::system_clock::now().time_since_epoch().count();
r_gen.seed(r_seed); // This is the line giving an error
std::uniform_real_distribution<float> r_dist(-1.0, 1.0);
auto r_float = std::bind(r_dist, r_gen);
}
"main.cpp":
#include <iostream>
#include "foo.h"
int main() {
// Actually run the program
}
При попытке скомпилировать этот код выдается сообщение об ошибке:
error: 'r_gen' does not name a type
r_gen.seed(r_seed);
^~~~~
Яиспользуя Eclipse с MinGW. Я не уверен, почему он интерпретирует r_gen
как тип. И, кроме того, завершение вышеуказанного кода в функции (все внутри пространства имен foo
) позволяет правильно ее компилировать.
У меня есть теоретический вопрос и прагматический вопрос:
- (Теория) Почему мой пример кода не компилируется?
- (Pragmatic) Как мне организовать этот код так, чтобы он только запустил генератор один раз?