c++重载输出操作符
C++ Overloading Output Operator
我有一个头文件,看起来像这样:
#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问题,似乎类似,但据我所知,我有重载操作符的格式正确。
在.cpp文件中,不要说using
,而是声明正确的名称空间:
namespace microtask
{
namespace log
{
::std::ostream & operator<<(::std::ostream& out, const severity& level)
{
// ...
}
}
}
事实上,如果可以的话,不要随便说using
。在我看来,它应该保留给显式的基本成员取消隐藏和ADL请求。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- 使用具体输出操作符的声明(带有具体签名)
- 位操作符的优先级对输出的影响
- Cxx-prettyprint(用于标准容器)在命名空间std中定义了它的输出操作符——这违反了标准吗?
- 在模板外部重载模板类的输出流操作符
- 在中缀到后缀的输出中没有操作符和括号
- 输出一个pair列表(由重载操作符创建)
- c++输出操作符重载
- c++重载输出操作符
- 将facet应用于所有流输出,使用自定义字符串操作符
- 重载操作符输出
- 操作符重载等同于c++中的PHP, echo/print类变量作为默认输出
- 操作符重载clang++和g++不同的输出
- 将节点作为输出操作符传递
- 为什么要将对对象的引用作为实参传递给重载输出操作符?
- 解引用操作符和endl没有输出
- 输入/输出操作符的优先级
- 操作符重载- c++ toString输出整数