局部变量到全局变量

时间:2020-09-23 21:28:19

标签: c++ c++14 jsoncpp

我是C ++的新手,如果我犯了一个非常愚蠢的错误,对不起。

我正在使用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();

感谢您的帮助,如果我是个白痴,再次表示歉意。

1 个答案:

答案 0 :(得分:0)

您可以将值保存在自己的类中,而不是将它们保存在静态变量中。访问该类的一种方法是使其成为单例。这将允许您像全局变量一样访问它。 您还可以将该对象分配给每个需要在其中保存设置的对象。

相关问题