std::vector<std::string> Config::list[]
std::vector<std::string,std::allocator<std::string>>
"std::vector<std::string,std::allocator<std::string>>
" (или приемлемое преобразование отсутствует). В функции rewrite строчка value = list[a];std::vector<std::string,std::allocator<std::string>>
" (или приемлемое преобразование отсутствует). В функции update строчка w_config << list[a] << std::endl;std::vector<std::string,std::allocator<std::string>>
". В функции rewrite строчка str = list[a].substr(0, list[a].find_first_of(' '));std::vector<std::string,std::allocator<std::string>>
" та же строчка что в предыдущем пункте std::optional<int>
о которых вы писали, но мне кажется это уже не так важно. В моём коде меня только смущает функция получения количества переменных lot_list()
так как она может вызываться несколько раз если несколько переменых неправильных. Я пробовал использовать sizeof(list)/sizeof(list[0]) но компилятор выдает ошибку: std::string []: недопустимый оператор sizeof.#ifndef CONFIG_H_
#define CONFIG_H_
#include <string>
class Config {
private:
static const int lot_list();
static std::string list[];
static void update();
public:
static int initialize();
static void rewrite(std::string parametr, std::string value = "");
static std::string search_str(std::string parametr);
static int search_int(std::string parametr);
static bool search_bool(std::string parametr);
};
#endif /* CONFIG_H_ */
#include "Config.h"
#include <iostream>
#include <fstream>
std::ofstream w_config;
std::ifstream r_config;
const int Config::lot_list() {
int i = 0;
while (!list[i].empty()) {
++i;
}
return i;
}
std::string Config::list[]{
"title = NAME",
"window_mode = 0",
"width = 800",
"hight = 600"
};
void Config::update() {
std::cout << "Create file Config.ini" << std::endl;
w_config.open("Config.ini");
for (int a = 0; a < lot_list(); a++) {
w_config << list[a] << std::endl;
}
w_config.close();
}
int Config::initialize() {
r_config.open("Config.ini");
if (!r_config.is_open()) {
r_config.close();
std::cout << "Have not file Config.ini" << std::endl;
update();
r_config.open("Config.ini");
}
if (!r_config.is_open()) {
r_config.close();
std::cerr << "Failed open file Config.ini" << std::endl;
return -1;
}
else if (r_config.peek() == EOF) {
r_config.close();
std::cout << "File Config.ini empty" << std::endl << "Re-";
update();
r_config.open("Config.ini");
}
if (!r_config.is_open()) {
r_config.close();
std::cerr << "Failed open file Config.ini" << std::endl;
return -1;
}
else {
r_config.close();
std::cerr << "Open file Config.ini" << std::endl;
return 0;
}
}
void Config::rewrite(std::string parametr, std::string value) {
std::cout << "Re-Create file Config.ini" << std::endl;
std::string str;
if (value == "") {
for (int a = 0; a < lot_list(); a++) {
str = list[a].substr(0, list[a].find_first_of(' '));
if (str == parametr) {
value = list[a];
break;
}
}
}
else {
value = parametr + " = " + value;
}
bool i = 1;
w_config.open("Config_copy.ini");
r_config.open("Config.ini");
while (!r_config.eof()) {
std::getline(r_config, str);
if (parametr == str.substr(0, str.find_first_of(' '))) {
w_config << value << std::endl;
i = 0;
}
else if (str == "") {}
else {
w_config << str << std::endl;
}
}
if (i) {
w_config << value << std::endl;
}
w_config.close();
r_config.close();
w_config.open("Config.ini");
r_config.open("Config_copy.ini");
while (!r_config.eof()) {
std::getline(r_config, str);
if (str == "") {}
else {
w_config << str << std::endl;
}
}
w_config.close();
r_config.close();
std::remove("Config_copy.ini");
}
std::string Config::search_str(std::string parametr) {
std::string str;
for (int a = 0; a < 2; a++) {
r_config.open("Config.ini");
std::cout << "Search in file Config.ini -> " << parametr;
while (!r_config.eof()) {
std::getline(r_config, str);
if (parametr == str.substr(0, str.find_first_of(' '))) {
r_config.close();
str.erase(0, parametr.length() + 3);
break;
}
else {
str = "";
}
}
if (str == "") {
r_config.close();
std::cout << " -> not found" << std::endl;
rewrite(parametr);
}
else {
break;
}
}
std::cout << " = " << str << std::endl;
return str;
}
int Config::search_int(std::string parametr) {
std::string int_str = Config::search_str(parametr);
char* ch;
strtol(int_str.c_str(), &ch, 10);
if (*ch) {
std::cout << "Not the corect value" << std::endl;
rewrite(parametr);
int_str = search_str(parametr);
}
return stoi(int_str);
}
bool Config::search_bool(std::string parametr) {
std::string bool_str = search_str(parametr);
if (bool_str == "0") {}
else if (bool_str == "1") {}
else {
std::cout << "Not the corect value" << std::endl;
rewrite(parametr);
bool_str = search_str(parametr);
}
return stoi(bool_str);
}
#ifndef CONFIG_H_
#define CONFIG_H_
#include <string>
class Config {
private:
static void update_config();
public:
static int initialize();
static std::string search_str(std::string parametr);
static int search_int(std::string parametr);
static bool search_bool(std::string parametr);
};
#endif /* CONFIG_H_ */
#include "Config.h"
#include <iostream>
#include <fstream>
std::ofstream w_config;
std::ifstream r_config;
void Config::update_config() {
std::cout << "Create file Config" << std::endl;
w_config.open("Config.ini");
w_config << "title = NAME" << std::endl;
w_config << "window_mode = 0" << std::endl;
w_config << "width = 800" << std::endl;
w_config << "hight = 600" << std::endl;
w_config.close();
}
int Config::initialize() {
r_config.open("Config.ini");
if (!r_config.is_open()) {
std::cout << "Have not file Config.ini" << std::endl;
r_config.close();
update_config();
r_config.open("Config.ini");
}
if (!r_config.is_open()) {
std::cerr << "Failed open file Config.ini" << std::endl;
r_config.close();
return -1;
}
else {
std::cout << "Open file Config.ini" << std::endl;
r_config.close();
return 0;
}
}
std::string Config::search_str(std::string parametr) {
std::string str;
for (int a = 0; a < 2; a++) {
r_config.open("Config.ini");
std::cout << "Search in file Config.ini -> " << parametr;
while (!r_config.eof()) {
r_config >> str;
if (parametr == str) {
std::getline(r_config, str);
r_config.close();
str.erase(0, 3);
a = 2;
break;
}
else {
str = "";
}
}
if (str == "") {
r_config.close();
std::cout << " -> not found" << std::endl;
std::cout << "Re-";
update_config();
}
}
std::cout << " = " << str << std::endl;
return str;
}
int Config::search_int(std::string parametr) {
return stoi(search_str(parametr));
}
bool Config::search_bool(std::string parametr) {
return stoi(search_str(parametr));
}
#ifndef CONFIG_H_
#define CONFIG_H_
#include <string>
class Config {
private:
static void update_config();
public:
static int initialize();
static std::string search_str(std::string parametr);
static int search_int(std::string parametr);
static bool search_bool(std::string parametr);
};
#endif /* CONFIG_H_ */
#include "Config.h"
#include <iostream>
#include <fstream>
std::ofstream w_config;
std::ifstream r_config;
void Config::update_config() {
std::cout << "Create file Config" << std::endl;
w_config.open("Config.ini");
w_config << "title = NAME" << std::endl;
w_config << "window_mode = 0" << std::endl;
w_config << "width = 800" << std::endl;
w_config << "hight = 600" << std::endl;
w_config.close();
}
int Config::initialize() {
r_config.open("Config.ini");
if (!r_config.is_open()) {
std::cout << "Have not file Config.ini" << std::endl;
r_config.close();
update_config();
r_config.open("Config.ini");
}
if (!r_config.is_open()) {
std::cerr << "Failed open file Config.ini" << std::endl;
r_config.close();
return -1;
}
else {
std::cout << "Open file Config.ini" << std::endl;
r_config.close();
return 0;
}
}
std::string Config::search_str(std::string parametr) {
std::string str;
for (int a = 0; a < 2; a++) {
r_config.open("Config.ini");
std::cout << "Search in file Config.ini -> " << parametr;
while (!r_config.eof()) {
r_config >> str;
if (parametr == str) {
std::getline(r_config, str);
r_config.close();
str.erase(0, 3);
a = 2;
break;
}
else {
str = "";
}
}
if (str == "") {
r_config.close();
std::cout << " -> not found" << std::endl;
std::cout << "Re-";
update_config();
}
}
std::cout << " = " << str << std::endl;
return str;
}
int Config::search_int(std::string parametr) {
return stoi(search_str(parametr));
}
bool Config::search_bool(std::string parametr) {
return stoi(search_str(parametr));
}
Сделал с sizeof /sizeof возвращает шестнадцатиричное значение
Сделал list.size тоже 16ричное значения