注意:请不要与其他具有相同标题/ errocode的Stackoverflow问题混淆 - 它们主要是由于缺少#include <string>
,但这不是问题。
当我尝试编译它时,我正在阅读Pretty-print C++ STL containers问题并从他的GitHub Project cxx-prettyprint下载Kerrek的代码(我的环境是Windows 7,Visual Studio 2013,编译项目为控制台应用程序&#34;使用多字节字符集&#34;),点击模板扣除错误。
Mike Jinhan在评论中建议它有点奇怪,它编译编译并使用当前的MSVC ++运行良好:see it online。
我很困惑,我的配置肯定有问题。我创建了一个空白的新Windows控制台应用程序,并添加了Kerrek的代码,专注于字符串测试转换的向量,删除了其他方案,如set / map等:
int main(int argc, char* argv[])
{
std::vector<std::string> v;
v.push_back("hello, world");
v.push_back("2nd line");
v.push_back("last line");
std::cout << v;
}
,现在出现错误:
错误1错误C2679:二进制&#39;&lt;&lt;&#39; :找不到哪个运营商需要 类型的右手操作数 &#39;的std ::矢量&GT;&#39; (或者没有 可接受的转换)
如果我明确调用pretty_print::operator <<
,
pretty_print::operator<<(std::cout, v);
,点击另一个模板扣除错误:
错误1错误C2784:&#39; std :: basic_ostream&lt; _Elem,_Traits&gt; &amp; pretty_print :: operator&lt;&lt;(std :: basic_ostream&lt; _Elem,_Traits&gt;&amp;,const pretty_print :: print_container_helper &安培;)&#39; :无法推断出&#39; const的模板参数 pretty_print :: print_container_helper &安培;&#39;来自&#39; std :: vector&gt;&#39;
只有在明确创建print_container_helper
时才会编译:
pretty_print::print_container_helper<std::vector<std::string>, char, ::std::char_traits<char>, pretty_print::delimiters<std::vector<std::string>, char>>
vh(v);
pretty_print::operator<<(std::cout, vh);
完整代码在此处:http://rextester.com/RJX76690