/* 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"];
else
return 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"];
else
return mime[suffix];
}