Перебирая список пар, список находится в массиве

Я искал самые отдаленные уголки Вселенной (интернет) и не нашел ни единого намека на то, как решить мою проблему. Итак, я прихожу к вам.

Я пытаюсь перебрать список, который содержит пары строк.
Этот список является одним из 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 ++.

1

Решение

first а также second являются членами переменные из std::pair не участник методы. Оставьте скобки:

std::cout << (*logit).first << std::endl << (*logit).second << std::endl;
3

Другие решения

Вам не нужно () чтобы получить доступ к .first а также .second из std::pair члены. Они переменные члены, а не методы.

Удалить их:

std::cout << (*logit).first() << std::endl << (*logit).second() << std::endl;
^^                                ^^
2

первый & Вторые не являются функциями-членами. Вы не можете использовать их как функцию. Уберите скобки. Также вместо того, чтобы сделать logd массивом, вы можете использовать вектор что-то вроде этого

станд :: вектор< станд :: список< станд :: пара< std :: string, std :: string>>> logd;

Также это предотвратит ненужное выделение памяти.

2
По вопросам рекламы [email protected]