当我的代码超出函数范围时,为啥会出现编译器错误“未命名类型”?

     2023-02-16     222

关键词:

【中文标题】当我的代码超出函数范围时,为啥会出现编译器错误“未命名类型”?【英文标题】:Why do I get the compiler error "does not name a type" when my code is outside of a function scope?当我的代码超出函数范围时,为什么会出现编译器错误“未命名类型”? 【发布时间】:2019-10-02 02:50:50 【问题描述】:

当我偶然发现这个我不理解的错误时,我正在通过在随机位置生成对象来测试我正在构建的游戏引擎。

“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);
^~~~~

我正在使用带有 MinGW 的 Eclipse。我不确定它为什么将 r_gen 解释为一种类型。此外,将上述代码包装在一个函数中(命名空间foo 中的所有内容)可以使其正确编译。

我有一个理论问题和一个实用问题:

(理论) 为什么我的示例代码无法编译? (实用)我应该如何安排这段代码,以便它只为生成器播种一次?

【问题讨论】:

你不能在函数外执行这样的语句。 @n.m 还有this one 至少有类似的答案。 重新打开。是的,有很多答案说明了为什么这不能编译。但它们都没有显示使它工作的简单修复。 【参考方案1】:

只需改变前两个定义的顺序,从种子构造生成器:

auto r_seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine r_gen(seed);

【讨论】:

为啥这个程序在调用函数时会出现分段错误?

...:2013-08-2021:13:41【问题描述】:这是我的程序的一部分,当我运行这个程序时,我遇到了分段错误。我已将其范围缩小到这一行:checkBase(ptr1,ptr2)我将这两个都作为指针传递。并且它们 查看详情

为啥在使用模板时会出现“未解析的外部符号”错误? [复制]

...误?[复制]【发布时间】:2009-01-1906:29:08【问题描述】:当我使用模板为类编写C++代码并在源(CPP)文件和头(H)文件之间拆分代码时,在链 查看详情

当函数返回时,指向超出范围的对象的 C++ 指针 - 为啥会这样?

】当函数返回时,指向超出范围的对象的C++指针-为啥会这样?【英文标题】:C++pointertoobjectswhichgooutofscopewhenfunctionreturns-whydoesthiswork?当函数返回时,指向超出范围的对象的C++指针-为什么会这样?【发布时间】:2013-05-1615:31:35【... 查看详情

为啥在尝试调用采用动态参数的基本构造函数/方法时会出现此编译错误?

...【发布时间】:2011-12-2707:00:11【问题描述】:在重构一些代码时,我遇到了这个奇怪的编译错误:构造函数 查看详情

为啥我会出现超出范围的错误?

...发布时间】:2015-11-2715:23:24【问题描述】:我似乎找不到我的问题所在。它是一个三文件程序,一个文件中包含一个Die类,另一个文件中包含一个直方图类,以及main.cpp文件。它应该打印一个用X构建的直方图,以显示骰子落在六... 查看详情

为啥当我发出信号时会出现分段错误

】为啥当我发出信号时会出现分段错误【英文标题】:WhyIgetsegmentationfaultwhenIthesignal为什么当我发出信号时会出现分段错误【发布时间】:2018-01-1603:09:43【问题描述】:处理信号SIGALARM时出现分段错误。这是我的代码。classUThreadpu... 查看详情

调试时出错:调试断言失败:向量下标超出范围

...:我正在编写使用HuMoment提取功能识别手势的代码,但是当我开始调试时,会出现一条通知,提示DebugAssertionFailed!向量下标超出范围。有人告诉我,我的代码中有错误,但我仍然无法 查看详情

JsLint'超出范围'错误

...922:06:20【问题描述】:functiontest()if(true)vara=5;alert(a);test();当我检查JsLint时,我的JS代码中不断出现“超出范围”错误,这对我来说毫无意义。所以我快速创建了一个示例。这段代码真的有问题吗,因为变量最终还是 查看详情

Bash 脚本错误:“函数:未找到”。为啥会出现这种情况?

...发布时间】:2012-09-1005:42:22【问题描述】:我正在尝试在我的Ubuntu机器上运行bashscript,但它给了我一个错误:找不到函数为了进行测试,我创建了以下 查看详情

当我想在 C++ Builder Starter 中链接静态库 TinyXML 2 的发布版本时,为啥会出现未解决的外部错误?

】当我想在C++BuilderStarter中链接静态库TinyXML2的发布版本时,为啥会出现未解决的外部错误?【英文标题】:WhyIgetunresolvedexternalerrorswhenIwanttolinkthereleaseversionofthestaticlibraryTinyXML2inC++BuilderStarter?当我想在C++BuilderStarter中链接静态库Ti... 查看详情

当我尝试迁移模型时,为啥会出现“无法序列化错误”?

】当我尝试迁移模型时,为啥会出现“无法序列化错误”?【英文标题】:WhydoIgetthe"cannotserializeerror"whenItrytomigratemymodel?当我尝试迁移模型时,为什么会出现“无法序列化错误”?【发布时间】:2020-07-3101:42:02【问题描述... 查看详情

当我尝试快速加载我的表格视图时,为啥会出现 EXC_BAD_INSTRUCTION 错误?

】当我尝试快速加载我的表格视图时,为啥会出现EXC_BAD_INSTRUCTION错误?【英文标题】:WhyamIgettingEXC_BAD_INSTRUCTIONerrorwhenIamtryingtoloadmytableviewinswift?当我尝试快速加载我的表格视图时,为什么会出现EXC_BAD_INSTRUCTION错误?【发布时间... 查看详情

当我在此页面中声明方法时,为啥此代码会出现“找不到符号”错误?

】当我在此页面中声明方法时,为啥此代码会出现“找不到符号”错误?【英文标题】:Whydoesthiscodegetmea"Cannotfindsymbol"errorwhenIdeclarethemethodinthispage?当我在此页面中声明方法时,为什么此代码会出现“找不到符号”错误?... 查看详情

为啥当我尝试创建一个从我的图书馆中删除书籍的功能时会出现错误?

】为啥当我尝试创建一个从我的图书馆中删除书籍的功能时会出现错误?【英文标题】:WhywhenItryingtomakeafunctionthatdeletebooksfrommylibraryIgetanError?为什么当我尝试创建一个从我的图书馆中删除书籍的功能时会出现错误?【发布时间】... 查看详情

为啥在超出数组末尾写入时不会出现分段错误?

】为啥在超出数组末尾写入时不会出现分段错误?【英文标题】:Whydon\'tIgetasegmentationfaultwhenIwritebeyondtheendofanarray?为什么在超出数组末尾写入时不会出现分段错误?【发布时间】:2022-01-2309:25:45【问题描述】:为什么编译时没有... 查看详情

为啥这个 Java 代码会编译?

】为啥这个Java代码会编译?【英文标题】:WhydoesthisJavacodecompile?为什么这个Java代码会编译?【发布时间】:2013-03-2606:55:39【问题描述】:在方法或类范围内,下面的行编译(带有警告):intx=x=1;在类范围内,变量获取默认值的... 查看详情

错误向量下标超出范围

...criptoutofrange【发布时间】:2015-08-0201:09:53【问题描述】:当我尝试使用while循环将向量的内容写入新文件时,我相信我的错误在我的writeline函数中。//Readfromtxtfile,writetonewtextfile#include<iostream>#include<fstream>#include 查看详情

为啥这个向量代码会出现分段错误?

...分段错误?【发布时间】:2014-04-0818:51:01【问题描述】:当我在Code::Blocks中执行此代码时,我遇到了分段错误。为什么?我已经使用调试并没有找到原因。任何帮助都是有用的。调试器显示它来自向量push_back方法,但特别是在复... 查看详情