내가 MSVC10에서 잘 컴파일이지도가 : std :: ofstream은 움직일 수 있습니까?
std::map<std::string, std::ofstream> m_logFiles;
그러나 우분투에
사용하여 g ++ 4.5 C++ 0X이 활성화를, 나는 다음과 같은 오류 메시지가 :는/usr/포함/C++/4.5/bits/ios_base.h | 785 | 오류 : 'std :: ios_base :: ios_base (const std :: ios_base &)'가 개인용
개체 대신 포인터를 사용하여 문제를 해결했습니다.
웹에서 검색 할 때 스트림을 복사 할 수 없음을 알았습니다 (이유는 잘 설명되어 있습니다). 하지만 내 질문은, 표준입니다 :: ofstream 이동식 무엇입니까? 그렇다면 표준 컨테이너에서 템플릿 매개 변수로 사용할 수 없습니까?
그렇다면 MSVC10 뒤에 g ++가 있습니까? (MSVC에서 왜 작동하는지 설명 할 것입니다). 필자는 컴파일러 작성자에게 심지어 최종본이 아닌 것을 구현하도록 부탁하는 것은 어리석은 짓을 알지만, 미래에 대해서는 궁금하다.
g ++ 4.6.1을 사용하면 도움이되지 않았습니다.
편집 : 내가 조금 더 파헤친 의견을 읽고 삽입이지도의 선언이 아니라 문제를 일으키는 것으로 나타났습니다.
#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;
}
하지만 여전히 행운 :
읽기 Cubbi의 링크를 나는 다음을 시도했다. g ++는 삭제 된 복사본 생성자의 사용에 대해 불평합니다.
GCC 4.6.1에서 정상적으로 컴파일됩니다. –
게시 된 코드는 GCC 4.5.3에서도 잘 컴파일됩니다. 그러나 GCC의 라이브러리 (clang의 libC++와는 달리)는 아직 map.emplace()를 구현하지 않았습니다. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44436 - 아마도 그것이 오류 메시지의 원인입니까? – Cubbi
@Cubbi : 귀하의 링크를 읽고 std :: move를 사용하여 시도했지만 변경은하지 않았습니다. –