gpt4 book ai didi

c++ - esms.cpp :234: error: 'the_config' was not declared in this scope

转载 作者:行者123 更新时间:2023-11-28 08:20:48 25 4
gpt4 key购买 nike

我正在尝试从不再有支持社区的旧开源项目编译一些 .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 the config.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com