4
我有一個頭文件看起來像這樣:C++重載輸出操作符
#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 <<'。這只是一個單獨的功能,而你需要的功能仍然缺失。永遠的解決方案,即使你的孫子們會感激的是,永遠不要使用':') –
啊,我明白了,我想這是有道理的。 Idk,它只是讓我失望,因爲我曾經爲類方法聲明實現。 –