[英]Why do I get the compiler error “does not name a type” when my code is outside of a function scope?
I was testing a game engine I am building by generating objects at random positions when I stumbled across this error that I do not understand.当我偶然发现这个我不理解的错误时,我正在通过在随机位置生成对象来测试我正在构建的游戏引擎。
"foo.h": “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": “主.cpp”:
#include <iostream>
#include "foo.h"
int main() {
// Actually run the program
}
Attempting to compile this code gives me the error message:尝试编译此代码会给我错误消息:
error: 'r_gen' does not name a type
r_gen.seed(r_seed);
^~~~~
I am using Eclipse with MinGW.我将 Eclipse 与 MinGW 一起使用。 I'm not sure why it is interpreting
r_gen
as a type.我不确定它为什么将
r_gen
解释为一种类型。 And furthermore, wrapping the above code in a function (everything inside namespace foo
) allows it to compile correctly.此外,将上述代码包装在 function (命名空间
foo
中的所有内容)中可以使其正确编译。
I have a theory question and a pragmatic question:我有一个理论问题和一个实用问题:
Just change the order of the first two definitions, and construct the generator from the seed:只需更改前两个定义的顺序,并从种子构造生成器:
auto r_seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine r_gen(seed);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.