Я пытаюсь скомпилировать некоторые файлы .cpp из старого проекта с открытым исходным кодом, который больше не имеет сообщества поддержки. В проекте около 15 .cpp файлов, и некоторые из них используют один общий файл с именем config.cpp. Я компилирую исходный код на C ++, используя make-файл, который запускает такую команду:
g ++ -g -c -Wall -педантик -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, но затем другие файлы cpp, которые зависят от файла config.cpp, начали получать ошибки.
Как заставить файл esms.cpp распознать, что "the_config" определен в config.cpp для исправления ошибки области?
Спасибо за вашу помощь! Надеюсь, этот вопрос имеет смысл, я только начинаю с C ++