2

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

我正在尝试遍历包含字符串对的列表。此列表是数组中的 20 个列表之一。这是我当前的代码:

记录.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

记录.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++ 很陌生。

4

3 回答 3

3

first并且second是非成员方法成员变量。去掉括号:std::pair

std::cout << (*logit).first << std::endl << (*logit).second << std::endl;
于 2013-05-18T10:31:27.613 回答
2

您不需要()访问成员的.first和。它们是变量成员,而不是方法。.secondstd::pair

删除它们:

std::cout << (*logit).first() << std::endl << (*logit).second() << std::endl;
                           ^^                                ^^
于 2013-05-18T10:32:15.363 回答
2

first & second 不是成员函数。你不能像函数一样使用它们。删除括号。另外,您可以使用类似这样的向量,而不是使 logd 成为数组

std::vector< std::list< std::pair< std::string, std::string > > > logd;

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

于 2013-05-18T10:41:02.807 回答