2010-07-14

Fighting with a template error (as usual)

I would like to make a program with OpenMesh (http://www.openmesh.org). I tried to test some examples that worked while ago, but now they don't work by the following compile error (template instantiation).
/usr/X11R6/bin/g++ -Wp,-MD,Ubuntu9.04/VisOMTriMeshDNode.dep -DHAVE_SSTREAM -DUSE_GMU_GERR -std=c++0x -Wall -Wnon-virtual-dtor -Woverloaded-virtual -DARCH_LINUX-DCOMP_GCC -I/usr/X11R6/include -I/usr/X11R6/include -I/usr/include/tcl8.4 -I/usr/include/qt4 -I/usr/include/qt4/QtCore -I/usr/include/qt4 -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtOpenGL -I/opt/OpenMesh/src -I/home/project/shared_proj -fPIC -g -Wno-uninitialized -D_INCTEMP -DUSE_GMU_GERR -DGMU_DBG_STRIPPATH=\"ALL\" -o Ubuntu9.04/VisOMTriMeshDNode.o -c VisOMTriMeshDNode.cc
/usr/include/c++/4.3/ext/new_allocator.h: In member function 'void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, _Args&& ...) [with _Args = long int, _Tp = OpenMesh::BaseProperty*]':
/usr/include/c++/4.3/bits/stl_vector.h:703:   instantiated from 'void std::vector<_Tp, _Alloc>::push_back(_Args&& ...) [with _Args = long int, _Tp = OpenMesh::BaseProperty*, _Alloc = std::allocator]'
/opt/OpenMesh/src/OpenMesh/Core/Utils/PropertyContainer.hh:104:   instantiated from 'OpenMesh::BasePropHandleT OpenMesh::PropertyContainer::add(const T&, const std::string&) [with T = OpenMesh::Attributes::StatusInfo]'
/opt/OpenMesh/src/OpenMesh/Core/Mesh/BaseKernel.hh:133:   instantiated from 'void OpenMesh::BaseKernel::add_property(OpenMesh::VPropHandleT&, const std::string&) [with T = OpenMesh::Attributes::StatusInfo]'
/opt/OpenMesh/src/OpenMesh/Core/Mesh/ArrayKernel.hh:486:   instantiated from here
/usr/include/c++/4.3/ext/new_allocator.h:114: error: invalid conversion from 'long int' to 'OpenMesh::BaseProperty*'
I remember I was able to compile this example. Why I can not now? Maybe my environment is updated. So, first I updated OpenMesh library from R3 to R5. But this changes nothing. This error is template instantiation error, which I don't like.  I read the source code for three hours with wondering: "Where this 'long int' comes from?" Finally I realized the g++ compile option, "-std=c++0x" is the reason. I totally forget I added this option since hash_map is not standard and will be unordered_map in some point. Today was another unproductive day...

No comments: