У меня есть заголовочный файл, который выглядит так:
#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, которые казались похожими, но, насколько я могу судить, у меня правильный формат перегрузки оператора.