在C++中创建记录器类

creating Logger class in C++

本文关键字:记录器 创建 C++      更新时间:2023-10-16

我测试类的主要方法说"表达式必须具有类类型",当尝试将枚举传递到函数调用中时,我得到"类型不允许"。

#include <iostream>
#include <string>
using std::string;
using std::cout;
class Logger
{
public:
    enum LogLevel { ALL, INFO, WARNING, ERROR, NEEDED };
private:
    LogLevel Errorlevel = ALL;
    string LogLevelNames[5] = { "ALL","INFO","WARNING", "ERROR", "NEEDED" };
public:
    Logger(LogLevel level)
    {
        Errorlevel = level;
        if (Errorlevel <= INFO)
        {
            cout << "[" << LogLevelNames[Errorlevel] << "]: " << "LOGGER set to: " << LogLevelNames[Errorlevel] << std::endl;
        }
    }
    ~Logger()
    {
        if (Errorlevel <= WARNING)
        {
            cout << "[" << LogLevelNames[Errorlevel] << "]:" << " LOGGER destroyed" << std::endl;
        }
    }
    void log(LogLevel level, string message)
    {
            if (Errorlevel <= level)
            {
                cout << "[" << LogLevelNames[level] << "]: " << message << std::endl;
            }
    }
};
int main()
{
    Logger logger(Logger::LogLevel WARNING); // no error
    logger.log(Logger::LogLevel ERROR, "test ERROR"); //errors
    logger.log(Logger::LogLevel INFO, "test INFO"); //errors
    system("PAUSE");
}

相当确定这是由于我自己的经验不足造成的,但我不确定如何改进这段代码。

您在

初始化Logger时缺少一些作用域,这导致编译器无法解析您对log()的调用。像这样修复它。

int main()
{
    Logger logger(Logger::WARNING);
    logger.log(Logger::ERROR, "test ERROR");
    logger.log(Logger::INFO, "test INFO");
    return 0;
}