相关疑难解决方法(0)

添加<iostream>会破坏g ++ - 7中的代码

有样品

// Example 2: Will this compile? 
//
// In some library header:
namespace N { class C {}; }
int operator+(int i, N::C) { return i+1; }
// A mainline to exercise it:
#include <numeric>
int main()
{
  N::C a[10];
  std::accumulate(a, a+10, 0);
}
Run Code Online (Sandbox Code Playgroud)

摘自"Exceptional C++:47工程难题,编程问题和解决方案" - 第34项.名称查找和接口原理 - 第4部分

g ++ 5.4成功编译它.但添加#include <iostream>破坏了代码

// Example 2: Will this compile? 
//
// In some library header:
namespace N { class C {}; }
int operator+(int i, N::C) …
Run Code Online (Sandbox Code Playgroud)

c++

6
推荐指数
1
解决办法
263
查看次数

从`std :: ostream_iterator`调用时找不到`operator <<`的重载?

// main.cpp
Run Code Online (Sandbox Code Playgroud)

#include <iostream>
#include <utility>
#include <algorithm>
#include <iterator>
#include <map>

template<typename t1, typename t2>
std::ostream& operator<<(std::ostream& os, const std::pair<t1, t2>& pair)
{
  return os << "< " << pair.first << " , " << pair.second << " >";
}

int main() 
{
  std::map<int, int> map = { { 1, 2 }, { 2, 3 } };
  std::cout << *map.begin() << std::endl;//This works

  std::copy(
    map.begin(),
    map.end(),
    std::ostream_iterator<std::pair<int,int> >(std::cout, " ")
  ); //this doesn't work
}
Run Code Online (Sandbox Code Playgroud)

no match for ‘operator<<’ …

c++ c++11

5
推荐指数
1
解决办法
3256
查看次数

标签 统计

c++ ×2

c++11 ×1