我有一个头文件,看起来像这样:
#pragma once
//C++ Output Streams
#include <iostream>
namespace microtask
{
namespace log
{
/**
* Severity level.
*/
enum severity
{
debug,
info,
warning,
error,
critical
};
/**
* Output the severity level.
*/
std::ostream& operator<<(std::ostream& out, const severity& level);
}
}
还有一个长这样的源代码文件:
//Definitions
#include "severity.hpp"
//Namespaces
using namespace std;
using namespace microtask::log;
std::ostream& operator<<(std::ostream& out, const severity& level)
{
switch(level)
{
case debug:
out << "debug";
break;
case info:
out << "info";
break;
case warning:
out << "warning";
break;
case error:
out << "error";
break;
case critical:
out << "critical";
break;
default:
out << "unknown";
break;
}
return out;
}
我正在尝试将其编译成动态库,但不幸的是,链接失败并显示以下错误消息:
undefined reference to `microtask::log::operator<<(std::basic_ostream<char, std::char_traits<char> >&, microtask::log::severity const&)'
我做错了什么?我查看了其他类似的stackoverflow.com问题,但据我所知,我正确地重载了运算符的格式。
::operator<<
,而不是microtask::log::operator<<
。那只是一个单独的函数,你需要的那个还没有定义。永久解决方案甚至连你的孙子都会感激不尽,就是永远不要使用using
:-) - Kerrek SB