gpt4 book ai didi

c++ - 命名空间中的 ostream 运算符 << 隐藏了其他 ostream::operator

转载 作者:搜寻专家 更新时间:2023-10-31 02:07:12 25 4
gpt4 key购买 nike

<分区>

使用带有 --std=c++14 的 gcc 版本 5.2.0 (GCC),如果命名空间 MyNamespace 中被注释掉的运算符 ostream 未被注释,则以下代码不再编译。这是错误还是功能? (用 g++ -c --std=c++14 x.cxx 编译)

#include <string>
#include <iostream>

typedef std::pair<std::string, std::string> StringPair;

std::ostream& operator<<( std::ostream&, const StringPair &pair) {
std::cout <<pair.first<<"."<<pair.second;
}

namespace MyNamespace {
class MyClass {};
//std::ostream& operator<< (std::ostream&, const MyClass &);
void xxx ();
}

void MyNamespace::xxx () {
StringPair pair;pair.first="1";pair.second="2";
std::cout <<pair<<std::endl;
}

我从运算符 << uncommented 得到的错误消息是:

x.cxx: In function ‘void MyNamespace::xxx()’:
x.cxx:18:13: error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘StringPair {aka std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >}’)
std::cout <<pair<<std::endl;
^

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com