/* requestData.h */class MimeType{private:// static pthread_mutex_t lock;static void init();static std::unordered_map<std::string, std::string> mime;MimeType();MimeType(const MimeType &m);public:static std::string getMime(const std::string &suffix);private:static std::once_flag init_flag; /* 此处为声明,并未定义 */};/* requestData.cpp */std::string MimeType::getMime(const std::string& suffix) {std::call_once(init_flag,init);if (mime.find(suffix) == mime.end())return mime["default"];elsereturn mime[suffix];}
解释:在CPP文件中无法找到init_flag的定义,因头文件中不对init_flag分配内存,故可在cpp文件中声明该对象,即可解决bug,
std::once_flag MimeType::init_flag; /* 定义 */std::string MimeType::getMime(const std::string& suffix) {std::call_once(init_flag,init);if (mime.find(suffix) == mime.end())return mime["default"];elsereturn mime[suffix];}
