所以我不知道究竟发生了什么,但不知何故,它与访问静态shared_ptr有关。我正在使用spdlog
库。在我的头文件中,我有以下内容:
/** This is the main logger sink used by Metadiff */
static const std::shared_ptr<spdlog::sinks::dist_sink_st> md_sink(new spdlog::sinks::dist_sink_st());
/** Creates a new logger linked to md_sink */
std::shared_ptr<spdlog::logger> logger(std::string name);
// {
// std::shared_ptr<spdlog::logger> ptr = spdlog::get(name);
// if (not ptr) {
// ptr = std::make_shared<spdlog::logger>(name, md_sink);
// spdlog::register_logger(ptr);
// ptr->set_level(spdlog::level::trace);
// ptr->set_pattern("[%H:%M:%S][%l][%n] %v");
// }
// return ptr;
// }
在相应的cpp文件中:
std::shared_ptr<spdlog::logger> logger(std::string name) {
std::shared_ptr<spdlog::logger> ptr = spdlog::get(name);
if (not ptr) {
ptr = std::make_shared<spdlog::logger>(name, md::utils::md_sink);
spdlog::register_logger(ptr);
ptr->set_level(spdlog::level::trace);
ptr->set_pattern("[%H:%M:%S][%l][%n] %v");
}
return ptr;
}
现在,当我尝试运行我的代码时,由于某种原因这不起作用,我不明白为什么(例如,当我尝试记录消息时,我没有得到任何东西)。如果我从cpp文件中删除实现并将其放在头文件中(并使其内联),它就会神奇地起作用。
请有人解释我的错误。