小编Pib*_*bmy的帖子

为什么`std::ostream& operator<<` 覆盖必须在 C++ 的“全局”范围内声明?

描述

我重写<< operatorstd::ostream缓解对象显示在我的代码。我使用不同的命名空间来定义要显示的对象类型。

这导致我出现编译错误。我找到了解决办法。似乎必须在全局范围内声明覆盖,但我真的不明白为什么。有人可以解释导致错误的原因吗?

错误

main.cpp:22:38: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream’ and ‘std::vector’)
         std::cout <<"printVector = " << data << std::endl;
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
Run Code Online (Sandbox Code Playgroud)

示例代码(不编译)

这是一个显示错误的虚拟示例。

#include <iostream>
#include <vector>

inline std::ostream&
operator<<(std::ostream& strm, std::vector<uint8_t>& buffer)
{
    return strm << "display std::vector<uint8_t>";
}
    
namespace aNamespace {
    enum TestEnum { a, b, c };
    
    inline std::ostream&
    operator<<(std::ostream& strm, TestEnum& value)
    {
        return strm << "display TestEnum";
    }
  
    static void printVector () 
    {
        std::vector<uint8_t> data {1, …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
82
查看次数

标签 统计

c++ ×1