问题描述
我正在使用JsonCPP尝试读取我的配置文件,我想将它们存储在全局变量中,但是在函数结束时不清除它,我似乎无法解决该问题。
main.cpp:
#include "header.h"
int main()
{
bool b = InitJson();
if (!b) {
std::cout << "Config file missing or deformed.";
std::cin.get();
return 0;
}
std::cout << "Username: " << *bUsername << std::endl;
std::cin.get();
return 0;
}
json.cpp:
#include "header.h"
bool InitJson()
{
std::ifstream config_file("config.json");
Json::Value config;
config_file >> config;
if (!config["Username"] || !config["Password"])
return false;
bUsername = new std::string(config["Username"].asstring());
bPassword = new std::string(config["Password"].asstring());
if (!config["AutoMessage"] || !config["AutoMessage"]["enabled"]) {
bMessageEnabled = new bool(false);
}
else {
bMessageEnabled = new bool(config["AutoMessage"]["enabled"].asBool());
bMessageDelay = new int(config["AutoMessage"]["delay"].asInt());
}
std::cout << "Config file loaded sucessfully." << std::endl;
return true;
}
header.h:
#pragma once
#pragma warning(disable : 4996)
#include <iostream>
#include <json/json.h>
#include <fstream>
static std::string* bUsername;
static std::string* bPassword;
static bool* bMessageEnabled;
static int* bMessageDelay;
bool InitJson();
感谢您的帮助,如果我是个白痴,再次表示歉意。
解决方法
您可以将值保存在自己的类中,而不是将它们保存在静态变量中。访问该类的一种方法是使其成为单例。这将允许您像全局变量一样访问它。 您还可以将该对象分配给每个需要在其中保存设置的对象。