方法名在 C++ 中不能是“log”

问题描述 投票:0回答:0

我正在为我正在使用 C++ 进行的项目编写一个 Logger 类。正如人们所料,这个

Logger
类有一个
log
方法,它接受一条消息和一个级别:

class Logger {
public:
    void log(const std::string &message, int level);
}

此方法仅在类本身内部使用,用于具有预定义级别的其他方法,如

debug
info
warn
等。但是,我将其公开,因为我知道在某些时候我想要拥有子级别,并为每个子级别定义一个方法并不是那么有用,每个严重级别我只有 10 个级别(DEBUG=0 和 INFO=10,所以我可以在级别 5 上有一个 DEBUG 消息,如果我设置级别为 5,下面的所有 DEBUG 级别都将被忽略)。现在,我只是试图在存储在另一个类中的实例上调用该方法,称为
Server
。当我尝试编译时,出现以下编译器错误:

Compiling src/Server.cpp
src/Server.cpp:90:11: error: too few arguments to function call, expected 2, have 1; did you mean '::log'?
                        logger.log(request.getMethod() + " request on '" + request.getPath() + "'");
                               ^~~
                               ::log
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/math.h:373:15: note: '::log' declared here
extern double log(double);
              ^
1 error generated.
make: *** [build/obj/Server.o] Error 1

Process finished with exit code 2

现在,我已经知道你不应该重写关键字,或者像在许多库中一样命名全局函数,但这似乎不对。我的函数在一个类中,并在实例上调用,因此不应与类外的任何名称冲突。为什么会这样?

更新:

我不知何故错过了我自己的

log
方法中缺少的参数。我很困惑,以为它指的是对数函数。

c++ methods namespaces c++98
© www.soinside.com 2019 - 2024. All rights reserved.