我在MSVC10中有这个编译好的地图:
std::map<std::string,std::ofstream> m_logFiles;
但是在ubuntu使用g 4.5与C 0x启用,我得到以下错误信息:
/usr/include / c /4.5/bits/ios_base.h|785|error:’std :: ios_base :: ios_base(const std :: ios_base&)’是私有的
通过使用指针而不是对象,我解决了这个问题.
在网络上搜索,我了解到流并不意味着被复制(为什么被很好的解释).但我的问题是,std :: ofstream是一种可移动类型?如果是,是不是允许它作为标准容器中的模板参数使用?
如果是的话,那么在这一点上,MSVC10背后是g? (这将解释为什么它在MSVC上工作).我知道编译器作者要完全实施甚至不是最终的东西,这是很愚蠢的,但我对未来很好奇.
使用g 4.6.1没有帮助.
编辑:阅读评论我进一步挖了一下,发现插入是导致问题,而不是映射的声明.
阅读Cubbi的链接我试过以下:
#include <string> #include <fstream> #include <map> using namespace std; int main() { map<string,ofstream> m_logFiles; ofstream st; m_logFiles.insert(make_pair<string,ofstream>(string("a"),move(st))); return 0; }
解决方法
std :: ofstream是可移动的.这个程序使用clang / libc为我编译:
#include <string> #include <fstream> #include <map> int main() { std::map<std::string,std::ofstream> m_logFiles; }
参考文献27.9.1.11 [ofstream.cons].
原文地址:https://www.jb51.cc/c/112436.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。