Я искал самые отдаленные уголки Вселенной (интернет) и не нашел ни единого намека на то, как решить мою проблему. Итак, я прихожу к вам.
Я пытаюсь перебрать список, который содержит пары строк.
Этот список является одним из 20 в массиве.
это мой текущий код:
logging.h:
#ifndef LOGGING_H
#define LOGGING_H
#include <iostream>
#include <list>
#include <string>
class logging
{
public:
void log(int,std::string,std::string);
void draw();
logging();
virtual ~logging();
private:
int displaylevel=0;
std::list<std::pair<std::string,std::string>> logd[20];
};
#endif // LOGGING_H
logging.cpp:
#include "logging.h"#include <list>
#include <string>
#include <iostream>
logging::logging(){
//for future use
}
void logging::log(int level,std::string category, std::string entry) {
int thislevel;
for (thislevel=level-1;(thislevel>-1);thislevel--){
std::pair <std::string,std::string> newentry;
newentry = std::make_pair (category,entry);
logd[thislevel].push_front(newentry);
}
}
void logging::draw(){
//draw console on the screen using opengl
std::list<std::pair<std::string,std::string>>* log = &(logd[displaylevel]);
std::list<std::pair<std::string,std::string>>::iterator logit;
for ( logit = (*log).begin() ; logit != (*log).end() ; logit++ ) {
std::cout << (*logit).first() << std::endl << (*logit).second() << std::endl;
}
}
logging::~logging() {
//Deconstructor for log class (save log to file?)
}
Идея состоит в том, что если регистрируется событие важности 5, то оно заносится в список 0,1,2,3 и 4. Таким образом, различные подробные уровни могут быть показаны в игре (если консоль / журнал открыта) просто отображение списка, соответствующего этому подробному уровню (определенному уровнем отображения). Однако я не могу правильно перебрать список, он продолжает выдавать ошибку при вызове std :: basic_string. Любая помощь приветствуется, я очень новичок в C ++.
first
а также second
являются членами переменные из std::pair
не участник методы. Оставьте скобки:
std::cout << (*logit).first << std::endl << (*logit).second << std::endl;
Вам не нужно ()
чтобы получить доступ к .first
а также .second
из std::pair
члены. Они переменные члены, а не методы.
Удалить их:
std::cout << (*logit).first() << std::endl << (*logit).second() << std::endl;
^^ ^^
первый & Вторые не являются функциями-членами. Вы не можете использовать их как функцию. Уберите скобки. Также вместо того, чтобы сделать logd массивом, вы можете использовать вектор что-то вроде этого
станд :: вектор< станд :: список< станд :: пара< std :: string, std :: string>>> logd;
Также это предотвратит ненужное выделение памяти.