C++ std::ostream_迭代器找不到运算符<&书信电报;

C++ std::ostream_迭代器找不到运算符<&书信电报;,c++,iterator,operators,operator-overloading,C++,Iterator,Operators,Operator Overloading,我已经声明了一个操作符std::copy找不到操作符的重载也许您可以尝试: 结构对:std::PAIR { 使用std::pair::pair; }; int main(int argc,char*argv[]){ std::矢量数据; std::copy(data.begin()、data.end()、std::ostream_迭代器(std::cout,“\n”); 返回0; } 既然已经有了一个很好的答案,我将简单地引用以下链接: 问题是名称查找找不到您的 运算符std::矢量数据;

我已经声明了一个
操作符
std::copy
找不到
操作符的重载也许您可以尝试:

结构对:std::PAIR { 使用std::pair::pair; }; int main(int argc,char*argv[]){ std::矢量数据; std::copy(data.begin()、data.end()、std::ostream_迭代器(std::cout,“\n”); 返回0; }

既然已经有了一个很好的答案,我将简单地引用以下链接:

问题是名称查找找不到您的 运算符
std::矢量数据;
std::copy(data.begin()、data.end()、std::ostream_迭代器(std::cout,“\n”);

请试试这个,我想在

一般情况下,谷歌搜索将您带到了特定情况下


请注意,如果您在名称N中有一个类型T,要使用ostream_迭代器+copy组合,我看到您的运算符。。。那么,你有什么建议?与
std::copy
@WonderCsabo使用
std::for_each
和functor相比,手动迭代和打印似乎不太优雅。这是怎么回事?我将运算符放入std名称空间。它是有效的,但似乎有点粗糙。@WonderCsabo您永远不应该在std名称空间中放置某些内容。标准不允许这样做。您可以在
std
命名空间中为用户定义的类型专门化模板。不,这根本不是问题所在。C++11允许这种语法。@是的,你需要C++11。另一个选项(如链接中所示)是流操纵器。@让我发布为我编译的完整代码示例。我刚刚尝试了您的完整代码。我得到了
错误:“std::pair::pair”名称构造函数
。顺便说一句,我正在使用MingW4.7.2,也许它还不支持这个功能。@Wonder它既适用于我,也适用于我。啊,我使用的是4.8.1。让我们注意一下,如果在名称N中有一个类型T,要使用ostream_迭代器+copy组合,您的运算符
std::ostream& operator<<(std::ostream& o, const std::pair<int, int>& p) {
    o << p.first << p.second;
    return o;
}
std::vector<std::pair<int, int>> data;
std::copy(data.begin(), data.end(), std::ostream_iterator<std::pair<int, int>>(std::cout, "\n"));
std::for_each(data.begin(), data.end(), [](const std::pair<int, int>& p)
{
   std::cout << p << std::endl;
});
struct PAIR : std::pair<int, int>
{
  using std::pair<int, int>::pair;
};

int main(int argc, char* argv[]) {
std::vector<std::pair<int, int>> data;
std::copy(data.begin(), data.end(), std::ostream_iterator<PAIR>(std::cout, "\n"));
    return 0;
}
#include <iostream>
#include <limits>
#include <vector>
#include <iterator>
#include <map>

std::ostream& operator<<(std::ostream& o, const std::pair<int, int>& p) {
    o << p.first << p.second;
    return o;
}

struct PAIR : std::pair<int, int>
{
    using std::pair<int, int>::pair;
};

int main(int argc, char* argv[]) {
std::vector<std::pair<int, int> > data;
data.push_back(std::pair<int, int>(50, 42));
std::copy(data.begin(), data.end(), std::ostream_iterator<PAIR>(std::cout, "\n"));
    return 0;
}
std::vector<std::pair<int, int> > data;
std::copy(data.begin(), data.end(), std::ostream_iterator<std::pair<int, int> >(std::cout, "\n"));
namespace N {
    class T;
    std::ostream & operator << ( std::ostream &; T const & );
}
N::T t;
std::cout << t << std::endl;
std::list<N::t> alist;
alist.push_back(t);

std::ostream_iterator<N::t> out_itr(std::cout, "\n");
std::copy(alist.begin(), alist.end(), out_itr);