我实现Singleton类进行日志记录。我声明logging_instance_
的静态仅用于在类名support_service::logging_service
上创建一个实例。
Service_logging调用类support_service::logging_service
的实例,它解析静态变量::logging_instance_
但显示错误
undefined reference to `support_service::logging_service<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>::logging_service()'
collect2: ld returned 1 exit status
support_service.hpp
namespace support_service
{
template<typename PATH = std::string , typename LEVEL = int>
class logging_service
{
public:
static boost::shared_ptr<logging_service<PATH,LEVEL> > instance();
....
private:
logging_service();
logging_service(const logging_service<PATH,LEVEL>&);
static boost::shared_ptr<logging_service<PATH,LEVEL> > logging_instance_;
};
}
template<typename PATH, typename LEVEL>
boost::shared_ptr<logging_service<PATH,LEVEL> > logging_service<PATH,LEVEL>::instance()
{
if(logging_instance_.get() == NULL)
logging_instance_ = boost::shared_ptr<logging_service<PATH,LEVEL> >(new logging_service<PATH,LEVEL>``());
return logging_instance_;
}
service_logging.hpp
using namespace support_service;
template<typename PATH, typename LEVEL>
boost::shared_ptr<logging_service<PATH,LEVEL> >support_service::logging_service<PATH,LEVEL>::logging_instance_;
namespace service_logging
{
template<typename PATH = std::string, typename LEVEL = int>
class service_logging
{
public:
service_logging();
bool set_logging(PATH file_path);
};
}
template<typename PATH, typename LEVEL>
bool service_logging<PATH,LEVEL>::set_logging(PATH file_path)
{
boost::shared_ptr<logging_service<PATH,LEVEL> > logging_ = logging_service<PATH,LEVEL>::instance();
...
}
答案 0 :(得分:1)
我注意到的一件事是你没有为logging_service或service_logging构造函数设置一个主体,是否可以从发布的代码中省略?
不幸的是,这是我能从你的代码中找到的所有内容,如果有一些部分缺失,那么请添加它们以便我可以进一步了解。
答案 1 :(得分:0)
您在头文件support_service.hpp(第14行)中声明了ctor support_service::logging_service<PATH,LEVEL>::logging_service
,甚至在同一个头文件(第24行)中为未指定的PATH
和LEVEL
调用它。但是,你没有提供定义,所以当然你得到一个未定义的引用错误,你还有什么想法呢?
解决方案:为您的班级定义ctor。确保从头文件support_service.hpp中可以看到该定义,或者为所有可能的PATH
- LEVEL
组合实例化该定义。