Incomplete type errors when compiling with g++ on OSX 10.9
The PRs 1887 and 1890 improve compiler compatibility regarding smart pointers and forward declarations.
https://github.com/OpenMW/openmw/pull/1887
https://github.com/OpenMW/openmw/pull/1890 (See also https://github.com/OpenMW/openmw/pull/1888)
When attempting to compile on OSX using g++ I encountered two different compilation errors related to incomplete types.
[ 24%] Building CXX object apps/openmw/CMakeFiles/openmw.dir/mwrender/renderingmanager.cpp.o
In file included from /Users/pineapple/git/openmw/apps/openmw/mwrender/renderingmanager.cpp:1:
In file included from /Users/pineapple/git/openmw/apps/openmw/mwrender/renderingmanager.hpp:4:
/Users/pineapple/git/openmw/openmw-deps/include/osg/ref_ptr:35:36: error: member access into incomplete type 'SceneUtil::UnrefWorkItem'
~ref_ptr() { if (_ptr) _ptr->unref(); _ptr = 0; }
^
/Users/pineapple/git/openmw/./components/sceneutil/unrefqueue.hpp:14:11: note: in instantiation of member function
'osg::ref_ptr<SceneUtil::UnrefWorkItem>::~ref_ptr' requested here
class UnrefQueue : public osg::Referenced
^
/Users/pineapple/git/openmw/./components/sceneutil/unrefqueue.hpp:10:11: note: forward declaration of 'SceneUtil::UnrefWorkItem'
class UnrefWorkItem;
[ 55%] Building CXX object apps/openmw/CMakeFiles/openmw.dir/mwgui/windowmanagerimp.cpp.o
In file included from /Users/pineapple/git/openmw/apps/openmw/mwgui/windowmanagerimp.cpp:1:
In file included from /Users/pineapple/git/openmw/apps/openmw/mwgui/windowmanagerimp.hpp:10:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/stack:86:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:159:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__split_buffer:7:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:627:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:2424:27: error: invalid application of
'sizeof' to an incomplete type 'Video::VideoPlayer'
static_assert(sizeof(_Tp) > 0, "default_delete can not delete incomplete type");
^~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:2625:13: note: in instantiation of
member function 'std::__1::default_delete<Video::VideoPlayer>::operator()' requested here
__ptr_.second()(__tmp);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:2593:46: note: in instantiation of
member function 'std::__1::unique_ptr<Video::VideoPlayer, std::__1::default_delete<Video::VideoPlayer> >::reset' requested here
_LIBCPP_INLINE_VISIBILITY ~unique_ptr() {reset();}
^
/Users/pineapple/git/openmw/apps/openmw/mwgui/videowidget.hpp:22:11: note: in instantiation of member function
'std::__1::unique_ptr<Video::VideoPlayer, std::__1::default_delete<Video::VideoPlayer> >::~unique_ptr' requested here
class VideoWidget : public MyGUI::Widget
^
/Users/pineapple/git/openmw/apps/openmw/mwgui/videowidget.hpp:8:11: note: forward declaration of 'Video::VideoPlayer'
class VideoPlayer;
^
1 error generated.
make[3]: *** [apps/openmw/CMakeFiles/openmw.dir/mwgui/windowmanagerimp.cpp.o] Error 1
make[2]: *** [apps/openmw/CMakeFiles/openmw.dir/all] Error 2
make[1]: *** [apps/openmw/CMakeFiles/openmw.dir/rule] Error 2
make: *** [openmw] Error 2
sophie:build pineapple$ sublime /Users/pineapple/git/openmw/apps/openmw/mwgui/videowidget.hpp
59cf552
Edited by mgl