2013-08-08 2 views
0

나는이 저장소에서 소스를 컴파일하려고 :오류 : 없음 일치 '연산자 ='

https://github.com/MaartenBaert/ssr/blob/master/src/GUI/PageOutput.cpp

:이 특정 소스 파일에

https://github.com/MaartenBaert/ssr

그리고 컴파일 오류

다음 오류와 함께 :

../../src/GUI/PageOutput.cpp:66: error: no match for ‘operator=’ in ‘((PageOutput*)this)->PageOutput::m_containers = {{"Matroska (MKV)", "matroska", {"mkv"}, "Matroska files (*.mkv)", {(PageOutput::enum_video_codec)0u, (PageOutput::enum_video_codec)1u, (PageOutput::enum_video_codec)2u}, {(PageOutput::enum_audio_codec)0u, (PageOutput::enum_audio_codec)1u, (PageOutput::enum_audio_codec)2u, (PageOutput::enum_audio_codec)3u}}, {"MP4", "mp4", {"mp4"}, "MP4 files (*.mp4)", {(PageOutput::enum_video_codec)0u}, {(PageOutput::enum_audio_codec)0u, (PageOutput::enum_audio_codec)1u, (PageOutput::enum_audio_codec)2u}}, {"WebM", "webm", {"webm"}, "WebM files (*.webm)", {(PageOutput::enum_video_codec)1u}, {(PageOutput::enum_audio_codec)0u}}, {"OGG", "ogg", {"ogg"}, "OGG files (*.ogg)", {(PageOutput::enum_video_codec)2u}, {(PageOutput::enum_audio_codec)0u}}, {"Other...", "", <brace-enclosed initializer list>(), "", <brace-enclosed initializer list>(), <brace-enclosed initializer list>()}}’ 
/usr/lib/gcc/x86_64-redhat-linux6E/4.4.6/../../../../include/c++/4.4.6/bits/vector.tcc:156: note: candidates are: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = PageOutput::ContainerData, _Alloc = std::allocator<PageOutput::ContainerData>] 
/usr/lib/gcc/x86_64-redhat-linux6E/4.4.6/../../../../include/c++/4.4.6/bits/stl_vector.h:336: note:     std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(std::vector<_Tp, _Alloc>&&) [with _Tp = PageOutput::ContainerData, _Alloc = std::allocator<PageOutput::ContainerData>] 
/usr/lib/gcc/x86_64-redhat-linux6E/4.4.6/../../../../include/c++/4.4.6/bits/stl_vector.h:356: note:     std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(std::initializer_list<_Tp>) [with _Tp = PageOutput::ContainerData, _Alloc = std::allocator<PageOutput::ContainerData>] 
make[2]: *** [simplescreenrecorder-PageOutput.o] Error 1 
올바른 형식의

기분을 상하게하는 코드는 :

m_containers = { 
     {"Matroska (MKV)", "matroska", {"mkv"}, "Matroska files (*.mkv)", 
       {VIDEO_CODEC_H264, VIDEO_CODEC_VP8, VIDEO_CODEC_THEORA}, 
       {AUDIO_CODEC_VORBIS, AUDIO_CODEC_MP3, AUDIO_CODEC_AAC, AUDIO_CODEC_UNCOMPRESSED}}, 
     {"MP4", "mp4", {"mp4"}, "MP4 files (*.mp4)"  , 
       {VIDEO_CODEC_H264}, 
       {AUDIO_CODEC_VORBIS, AUDIO_CODEC_MP3, AUDIO_CODEC_AAC}}, 
     {"WebM", "webm", {"webm"}, "WebM files (*.webm)" , 
       {VIDEO_CODEC_VP8}, 
       {AUDIO_CODEC_VORBIS,}}, 
     {"OGG", "ogg", {"ogg"}, "OGG files (*.ogg)"  , 
       {VIDEO_CODEC_THEORA}, 
       {AUDIO_CODEC_VORBIS}}, 
     {"Other...", "", {}, "", {}, {}}, 
}; 

나는 C 프로그래머 내 C의 더 해요 ++ 약간 녹슨입니다. 나는 주변을 수색했는데 그 오류는 흔한 일이지만 아직이 문제를 정확히 파악할 수 없었다.

+3

I을 GCC 4.4.6이 이니셜 라이저 목록 과부하를 지원한다고 생각하지 마십시오. – chris

+0

가능한 경우 gcc를 업그레이드하지 않는 편이 좋을 것입니다. 해결 방법이 있습니까? – aseq

+0

해당 소스 파일을 변경하지 않아도됩니다. – chris

답변

3

GCC 4.4.6은 std::initializer_list을 매개 변수로 지원하지 않으므로 목록 할당이 불가능합니다. 그러나 GCC를 업그레이드하는 것은 불가능 인 경우는 주위에 작업을 매우 쉽게 : std::begin/end 해당 버전에 존재하는 경우

PageOutput::ContainerData temp[] = { 
     {"Matroska (MKV)", "matroska", {"mkv"}, "Matroska files (*.mkv)", 
       {VIDEO_CODEC_H264, VIDEO_CODEC_VP8, VIDEO_CODEC_THEORA}, 
       {AUDIO_CODEC_VORBIS, AUDIO_CODEC_MP3, AUDIO_CODEC_AAC, AUDIO_CODEC_UNCOMPRESSED}}, 
     {"MP4", "mp4", {"mp4"}, "MP4 files (*.mp4)"  , 
       {VIDEO_CODEC_H264}, 
       {AUDIO_CODEC_VORBIS, AUDIO_CODEC_MP3, AUDIO_CODEC_AAC}}, 
     {"WebM", "webm", {"webm"}, "WebM files (*.webm)" , 
       {VIDEO_CODEC_VP8}, 
       {AUDIO_CODEC_VORBIS,}}, 
     {"OGG", "ogg", {"ogg"}, "OGG files (*.ogg)"  , 
       {VIDEO_CODEC_THEORA}, 
       {AUDIO_CODEC_VORBIS}}, 
     {"Other...", "", {}, "", {}, {}}, 
}; 

m_containers.assign(std::begin(temp), std::end(temp)); 

내가 기억할 수 있지만, 그렇지 않으면 쉽게 구현할 수있어 :

template<typename T, std::size_t N> 
T *begin(const T(&arr)[N]) {return arr;} 

template<typename T, std::size_t N> 
T *end(const T(&arr)[N]) {return arr + N;} 
+0

+1 감사합니다 .--) 코드 수정은 통찰력을 얻기에도 매우 유용합니다. – aseq