Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates stl映射的模板ostream运算符重载_Templates_Map_Namespaces_Overloading_Ostream - Fatal编程技术网

Templates stl映射的模板ostream运算符重载

Templates stl映射的模板ostream运算符重载,templates,map,namespaces,overloading,ostream,Templates,Map,Namespaces,Overloading,Ostream,水头 #include <algorithm> #include <map> #include <string> namespace ns { typedef std::map<std::string, int> StrIntMap; template<typename T1, typename T2> std::ostream &operator<&

水头

#include <algorithm>
#include <map>
#include <string>
namespace ns
{
      typedef std::map<std::string, int> StrIntMap;                  
      template<typename T1, typename T2>
      std::ostream &operator<<(std::ostream &stream, const std::map<T1, T2>& map);
};
#包括
#包括
#包括
名称空间ns
{
typedef std::map StrIntMap;
模板

std::ostream&operator我将仅解释问题,但如果没有贵方的进一步信息,很难找到解决方案

第一个问题是
操作符
#include "head.hpp"
template<typename T1>
std::ostream & ns::operator<<(std::ostream &stream, const ns::T1& map)
{
    for (ns::T1::const_iterator it = map.begin();
        it != map.end(); ++it)
    {
    stream << (*it).first << " --> " << (*it).second << std::endl;
}
    return stream;
}
#include <map>
#include <string>
#include <iostream>
#include "head.hpp"
int     main(int, char **)
{
    ns::StrIntMap bla;

     bla["one"] =  1;
     bla["two"] = 2;
     std::cout << bla << std::endl;
     return (0);
}
main.cpp no match for 'operator<<' in 'std::cout << bla' 
note C:\Dev-Cpp\include\c++\3.4.2\bits\ostream.tcc:63 candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>&(*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>] 
note C:\Dev-Cpp\include\c++\3.4.2\bits\ostream.tcc:63                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ios<_CharT, _Traits>&(*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>] 
note C:\Dev-Cpp\include\c++\3.4.2\bits\ostream.tcc:63                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base&(*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>] 
struct StrIntMap : std::map<std::string,int>
{
    // C++11 allows you to inherit all ctors from the base class:
    using std::map<std::string,int>::map;
};