迭代对列表,列表在数组中

时间:2013-05-18 10:24:06

标签: c++ stdstring std-pair stdlist

我搜索了宇宙最远的地方(也就是互联网),并没有找到一个如何解决我的问题的提示。所以我来找你。

我试图遍历包含字符串对的列表。 此列表是数组中的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 ++很新。

3 个答案:

答案 0 :(得分:3)

firstsecondstd::pair成员方法的成员变量。删掉括号:

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

答案 1 :(得分:2)

您无需()即可访问.first成员的.secondstd::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;

此外,它还可以防止不必要的内存分配。