- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从不再有支持社区的旧开源项目编译一些 .cpp 文件。项目中大约有 15 个 .cpp 文件,其中几个使用一个名为 config.cpp 的通用文件。我使用运行如下命令的 make 文件编译 C++ 源代码:
g++ -g -c -Wall -pedantic -ansi esms.cpp
但是这给了我这样的几个错误:esms.cpp:234: 错误:“the_config”未在此范围内声明
我检查了 esms.cpp 文件,它包含以下内容:
#include "game.h"
#include "config.h"
#include "tactics.h"
#include "report_event.h"
#include "teamsheet_reader.h"
#include "cond.h"
#include "util.h"
#include "mt.h"
#include "anyoption.h"
#include "cond_utils.h"
#include "config.h"
#include "comment.h"
我还查看了config.h文件,发现文件中有如下内容:
class config
{
public:
void load_config_file(string filename);
string get_config_value(string key);
void set_config_value(string key, string value);
int get_int_config(string key, int dflt);
friend config& the_config(void);
private:
config()
{}
config(const config& rhs);
config& operator= (const config& rhs);
map<string, string> config_map;
};
然后我检查了config.cpp文件,找到了the_config的声明:
#include <cstdio>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <cctype>
#include "config.h"
#include "util.h"
// get a reference to a static config (a singleton)
config& the_config(void)
{
static config tcfg;
return tcfg;
}
所以“the_config”似乎是在 config.h 和 config.cpp 文件中定义的,但出于某种原因,esms.cpp 文件认为它没有被声明。我尝试将该方法移至 esms.cpp 文件并将其从 config.cpp 文件中删除,但随后依赖于 config.cpp 文件的其他 cpp 文件开始出现错误。
如何让 esms.cpp 文件识别“the_config”在 config.cpp 中定义以修复范围错误?
感谢您的帮助!我希望这个问题是有道理的,我才刚刚开始使用 C++
最佳答案
the_config
函数不是真正在config.h
中声明。没有声明 esms.cpp
不知道 the_config
是什么,因此编译器会生成错误。
您确实在 config
类定义中有一个 the_config
的友元声明,但该友元声明不会产生“正常”的声明the_config
。上述 the_config
的友元声明只是引用封闭范围(在本例中为全局范围)中的函数,但它没有在全局范围内引入声明。
您需要明确地做出声明,即您必须添加
config& the_config(void);
在 config.h
中的类定义之外。
How do I make the
esms.cpp
file recognize that "the_config" is defined in theconfig.cpp
你不能。 C++ 编译器(狭义上的术语,即“编译器”而不是“链接器”)独立地查看每个翻译单元,这意味着 esms.cpp
不知道也不关心 配置.cpp
。使 esms.cpp
知道 the_config
的唯一方法是在 esms.cpp
中引入 the_config
的声明>。这通常是通过使用头文件来完成的。在您的情况下,它将是 config.h
。您需要修复您的 config.h
,如上所示。
关于c++ - esms.cpp :234: error: 'the_config' was not declared in this scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5905832/
第一年+ 我已经使用 esm 和 std/esm 包编写了我所有的代码,我能够无缝地使用 cjs 的依赖包,没有问题,而不需要 babel。 在 nodejs V14 中,混合的 esm/cjs 支持
我在 plunker 中有以下代码... // Thing.js export class Thing{ constructor(){ console.log("This thing is
我尝试使用 --experimental-modules 标志在 Node.js v8.7.0 中使用此语法导入 ESM 模块: import { check, validationResult }
所以我正在使用包 esm 和 module-alias,但似乎 esm 没有注册模块别名的路径。 这是我加载服务器文件的方式: nodemon -r esm ./src/index.js 8081 这
我想将 typescript react 应用程序作为组件捆绑到 ES 模块或 UMD 中。但是生成的 ES 包会产生一个无效的模块 js。 在 bundle 上它给了我这个提示。但我找不到任何解决方
我很好奇 ESM 的 tree-shaking/死代码消除是如何工作的。我在各种 Node.js 项目中使用 Typescript,并开始导出自己的 ESM 包 (tsc --module es201
我正在构建一个 webpack 应用程序,我有兴趣在整个应用程序中使用 ESM,这意味着使用 ESM 导入构建 webpack.config 文件。 我现在可以使用 Babel,但这是在 npm 添加
我想我已经阅读了 SO 上的每个线程以及互联网上的每个相关页面,一切都有一些问题 我想: 使用 webpack 捆绑我的 web 应用程序 在我的源 js 中使用 ES 模块并将它们转换为更广泛的浏览
我即将在 SMPP 上工作。我对从计算机系统到移动站的消息如何传递有基本的了解,我已经阅读了有关消息如何从 ESME 到 SMSC 再到移动站的信息。但实际上我无法理解。我的意思是,这些 (ESME
我有以下示例运行,而 JS 在其上没有捆绑器。 // index.js ;(async () => { const mod = await import('/index.json') cons
在阅读 webpack 文档中有关 tree shaking 的内容时,我遇到了这句话: In a 100% ESM module world, identifying side effects is
在阅读 webpack 文档中有关 tree shaking 的内容时,我遇到了这句话: In a 100% ESM module world, identifying side effects is
我正在开发一个 SMS 网关,我在考虑我应该在其中实现的功能。因此,我查看了一些 SMS 网关(SMSNOW、SMS studio 和 Ozeki)作为示例。 我几乎完成了实现,但我遇到了几乎所有 S
我正在尝试在 ESM 模块上使用 tone.js。 (我可以在带有 bundler 的“commonjs”中毫无问题地使用它) 在我的html中 和 tests.js: import * as To
我正在尝试获取 Esri ArcGis's NPM package与 SvelteKit 一起工作。 根据链接文档,@arcgis/core 应该是 ESM。但是,当我尝试将其导入 SvelteKit
我有以下组件: App.js import React from "react"; import { Slider } from "./Slider"; function App() { retu
当浏览器现在支持原生 ESM 时,为什么开发人员仍然需要使用像 rollup 和 webpack 这样的模块捆绑器 最佳答案 你不需要模块打包器——开发人员甚至在模块和 Webpack 存在之前就能够
我一直在尝试解决这个问题一个星期,但似乎无法真正找到问题所在。 我关注了this tutorial但我没有自己的项目结构(见下图) 在 esm.js 中: require = require("esm
我的设置 Node v14.16.0 我有一个测试文件,其中包含一个用 ESM 模块 (import) 编写的简单测试。 在 package.json我有一个脚本(遵循Jest documentati
我有一个组件库,它将发布到 npm 以供 razzle 应用程序使用。我想要对最佳实践发表意见的主要问题是,这些包应该用 cjs 还是 esm 构建,每个的缺点是什么? 我可以只构建到 cjs 吗?
我是一名优秀的程序员,十分优秀!