c++ - 无法为命名空间中的私有(private)枚举重载 i/o 运算符

标签 c++ enums namespaces operator-overloading friend

我在命名空间的类中有一个私有(private)枚举。我试图重载 I/O 运算符,但我得到的只是编译器提示 Enum 是私有(private)的。来自 this post 的解决方案对我没有任何帮助。这是我的问题的孤立版本。

测试类.h

#include <iostream>
namespace Test
{
    class TestClass
    {
        enum Enum : unsigned int {a = 0, b};
        friend std::ostream& operator<<(std::ostream& os, Enum e);
    };
    std::ostream& operator<<(std::ostream& os, TestClass::Enum e);
};

测试类.cpp

#include "TestClass.h"
std::ostream& operator<<(std::ostream& os, Test::TestClass::Enum e)
{
    //do it
}

编译器对此有提示,但当我从命名空间中删除该类时却没有提示,那么我该如何编译它呢?

我在用

g++ -c TestClass.h

编译这个

最佳答案

你cpp文件中的operator不是你声明的friend。 friend 是命名空间的成员,因为它在其中声明的类是成员。

因此也将运算符定义包装在命名空间范围内。或者完全限定定义

std::ostream& Test::operator<<(std::ostream& os, Test::TestClass::Enum e)
{
    //do it
}

关于c++ - 无法为命名空间中的私有(private)枚举重载 i/o 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55344919/

相关文章:

c++ - 将项添加到别名命名空间

node.js - 当 "Don' t do it 不是一个选项时,我如何将 Typescript 命名空间与外部模块混合使用?

c++ - GCC <= 4.9 的 std::atomic_store(shared_ptr) 替代方案?

c++ - 嵌套类奇怪函数查找: surrounding class functions hide global functions

c++ - gcc 中的 Intel 风格内联汇编

java - 如何从 Java 中的枚举返回一个对象?

c++ - 基于宏的 C++ 头文件选择

c# - 要使用的最佳标志值(提示和良好实践)

java - 使用 jsonschema2pojo 转换可变长度值的枚举

c++ - C++ 中从同一命名空间中的类继承的问题