Re: How do I get around circular references in C++?
On 21 May 2007 05:38:46 -0700, Erik Wikstr?m wrote:
make a forward declaration of Obj:
Actually, that is not enough.
#include <set>
class Obj;
class Obj { public: std::set<Obj> objset; };
This code, when compiled with g++ 4.1.2 with _GLIBCXX_CONCEPT_CHECKS enabled,
gives the following errors:
/.../boost_concept_check.h: In instantiation of '__gnu_cxx::_SGIAssignableConcept<Obj>':
/.../stl_set.h:111: instantiated from 'std::set<Obj, std::less<Obj>, std::allocator<Obj> >'
test2.cc:3: instantiated from here
/.../boost_concept_check.h:216: error: '__gnu_cxx::_SGIAssignableConcept<_Tp>::__a' has incomplete type
test2.cc:3: error: forward declaration of 'class Obj'
/.../boost_concept_check.h: In instantiation of '__gnu_cxx::_BinaryFunctionConcept<std::less<Obj>, bool, Obj, Obj>':
/.../stl_set.h:112: instantiated from 'std::set<Obj, std::less<Obj>, std::allocator<Obj> >'
test2.cc:3: instantiated from here
/.../boost_concept_check.h:361: error: '__gnu_cxx::_BinaryFunctionConcept<_Func, _Return, _First, _Second>::__first' has incomplete type
test2.cc:3: error: forward declaration of 'class Obj'
/.../boost_concept_check.h:362: error: '__gnu_cxx::_BinaryFunctionConcept<_Func, _Return, _First, _Second>::__second' has incomplete type
test2.cc:3: error: forward declaration of 'class Obj'
/.../boost_concept_check.h: In member function 'void __gnu_cxx::_SGIAssignableConcept<_Tp>::__constraints() [with _Tp = Obj]':
/.../stl_set.h:111: instantiated from 'std::set<Obj, std::less<Obj>, std::allocator<Obj> >'
test2.cc:3: instantiated from here
/.../boost_concept_check.h:208: error: using invalid field '__gnu_cxx::_SGIAssignableConcept<_Tp>::__a'
/.../stl_set.h:111: instantiated from 'std::set<Obj, std::less<Obj>, std::allocator<Obj> >'
test2.cc:3: instantiated from here
/.../boost_concept_check.h:209: error: using invalid field '__gnu_cxx::_SGIAssignableConcept<_Tp>::__a'
/.../boost_concept_check.h:209: error: using invalid field '__gnu_cxx::_SGIAssignableConcept<_Tp>::__a'
/.../stl_set.h:111: instantiated from 'std::set<Obj, std::less<Obj>, std::allocator<Obj> >'
test2.cc:3: instantiated from here
/.../boost_concept_check.h:210: error: using invalid field '__gnu_cxx::_SGIAssignableConcept<_Tp>::__a'
/.../boost_concept_check.h: In member function 'void __gnu_cxx::_BinaryFunctionConcept<_Func, _Return, _First, _Second>::__constraints() [with _Func = std::less<Obj>, _Return = bool, _First = Obj, _Second = Obj]':
/.../stl_set.h:112: instantiated from 'std::set<Obj, std::less<Obj>, std::allocator<Obj> >'
test2.cc:3: instantiated from here
/.../boost_concept_check.h:358: error: using invalid field '__gnu_cxx::_BinaryFunctionConcept<_Func, _Return, _First, _Second>::__first'
/.../boost_concept_check.h:358: error: using invalid field '__gnu_cxx::_BinaryFunctionConcept<_Func, _Return, _First, _Second>::__second'
/.../boost_concept_check.h: In member function 'void __gnu_cxx::_SGIAssignableConcept<_Tp>::__const_constraints(const _Tp&) [with _Tp = Obj]':
/.../boost_concept_check.h:210: instantiated from 'void __gnu_cxx::_SGIAssignableConcept<_Tp>::__constraints() [with _Tp = Obj]'
/.../stl_set.h:111: instantiated from 'std::set<Obj, std::less<Obj>, std::allocator<Obj> >'
test2.cc:3: instantiated from here
/.../boost_concept_check.h:214: error: using invalid field '__gnu_cxx::_SGIAssignableConcept<_Tp>::__a'
--
Joel Yliluoma - http://bisqwit.iki.fi/
: comprehension = 1 / (2 ^ precision)