我搜索了宇宙最远的地方(也就是互联网),并没有找到一个如何解决我的问题的提示。所以我来找你。
我试图遍历包含字符串对的列表。 此列表是数组中的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中。这样可以在游戏中显示各种详细级别(如果控制台/日志打开)通过简单地显示对应于该详细级别(由displaylevel定义)的列表。但是,我似乎无法正确地遍历列表,它不断调用std :: basic_string错误。感谢任何帮助,我对C ++很新。
答案 0 :(得分:3)
first
和second
是std::pair
成员方法的成员变量。删掉括号:
std::cout << (*logit).first << std::endl << (*logit).second << std::endl;
答案 1 :(得分:2)
您无需()
即可访问.first
成员的.second
和std::cout << (*logit).first() << std::endl << (*logit).second() << std::endl;
^^ ^^
。他们是可变成员,而不是方法。
删除它们:
{{1}}
答案 2 :(得分:2)
第一&amp;第二个不是会员职能。你不能像功能一样使用它们。删除括号。而不是使logd成为一个数组,你可以使用类似这样的向量
的std ::矢量&lt;的std ::列表&LT;的std ::对&LT; std :: string,std :: string&gt; &GT; &GT;的logD;
此外,它还可以防止不必要的内存分配。