无法为命名空间中的私有枚举重载 i/o 运算符
Can't overload i/o operators for private enum in namespace
我在命名空间的 class 中有一个私有枚举。我试图重载 I/O 运算符,但我得到的只是编译器抱怨 Enum 是私有的。 this post 的解决方案对我没有任何帮助。这是我的问题的孤立版本。
TestClass.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);
};
TestClass.cpp
#include "TestClass.h"
std::ostream& operator<<(std::ostream& os, Test::TestClass::Enum e)
{
//do it
}
编译器会抱怨这个,但当我从命名空间中删除 class 时不会抱怨,那么我该如何编译它呢?
我正在使用
g++ -c TestClass.h
编译这个
你的cpp文件中的operator不是你声明的friend。 friend 是命名空间的成员,因为它在其中声明的 class 是成员。
因此也将运算符定义包装在命名空间范围内。或者完全限定定义
std::ostream& Test::operator<<(std::ostream& os, Test::TestClass::Enum e)
{
//do it
}
我在命名空间的 class 中有一个私有枚举。我试图重载 I/O 运算符,但我得到的只是编译器抱怨 Enum 是私有的。 this post 的解决方案对我没有任何帮助。这是我的问题的孤立版本。
TestClass.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);
};
TestClass.cpp
#include "TestClass.h"
std::ostream& operator<<(std::ostream& os, Test::TestClass::Enum e)
{
//do it
}
编译器会抱怨这个,但当我从命名空间中删除 class 时不会抱怨,那么我该如何编译它呢?
我正在使用
g++ -c TestClass.h
编译这个
你的cpp文件中的operator不是你声明的friend。 friend 是命名空间的成员,因为它在其中声明的 class 是成员。
因此也将运算符定义包装在命名空间范围内。或者完全限定定义
std::ostream& Test::operator<<(std::ostream& os, Test::TestClass::Enum e)
{
//do it
}