namespace-probleme: stl-typedef in einem Namespace



  • Hiho!

    ich hab ein Problem mit folgendem Codeschnippsel:

    #include <list>
    
    namespace blurt
    {
    
    class AxisAlignedBoundingBox;
    class TraceableObject;
    class Ray;
    
    namespace kdtree
    {
    	typedef ::std::list<const blurt::TraceableObject*> ObjectList; // Zeile 24
    	// ...
    };
    };
    

    Der Code liefert beim Kompilieren eine ewig Lange Fehlerliste:

    In file included from c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/list:70,
                     from D:\works\coding\cpp\bluRT\src\/blurt/KdTreeHelper.h:11,
                     from D:\works\coding\cpp\bluRT\src\/blurt/KdTree.h:81,
                     from D:\works\coding\cpp\bluRT\src\/blurt/SpatialSubdivision.h:61,
                     from D:\works\coding\cpp\bluRT\src\/blurt/Raytracer.h:14,
                     from D:\works\coding\cpp\bluRT\src\Engine.cpp:12:
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:118: error: 'bidirectional_iterator_tag' in namespace 'blurt::std' does not name a type
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:196: error: 'bidirectional_iterator_tag' in namespace 'blurt::std' does not name a type
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:406: error: expected type-specifier
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:406: error: expected '>'
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:425: error: typedef name may not be a nested-name-specifier
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:425: error: expected ';' before '<' token
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:426: error: typedef name may not be a nested-name-specifier
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:426: error: expected ';' before '<' token
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:617: error: 'reverse_iterator' does not name a type
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:626: error: 'const_reverse_iterator' does not name a type
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:635: error: 'reverse_iterator' does not name a type
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:644: error: 'const_reverse_iterator' does not name a type
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:1103: error: '__true_type' has not been declared
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:1113: error: '__false_type' has not been declared
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:1134: error: '__true_type' has not been declared
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:1144: error: '__false_type' has not been declared
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h: In copy constructor 'blurt::std::list<_Tp, _Alloc>::list(const blurt::std::list<_Tp, _Alloc>&)':
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:497: error: there are no arguments to '__false_type' that depend on a template parameter, so a declaration of '__false_type' must be available
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:497: error: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h: In constructor 'blurt::std::list<_Tp, _Alloc>::list(_InputIterator, _InputIterator, const _Alloc&)':
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:514: error: '__is_integer' in namespace 'blurt::std' does not name a type
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:514: error: expected unqualified-id before '<' token
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:515: error: there are no arguments to '_Integral' that depend on a template parameter, so a declaration of '_Integral' must be available
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h: In member function 'void blurt::std::list<_Tp, _Alloc>::assign(_InputIterator, _InputIterator)':
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:567: error: '__is_integer' in namespace 'blurt::std' does not name a type
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:567: error: expected unqualified-id before '<' token
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:568: error: there are no arguments to '_Integral' that depend on a template parameter, so a declaration of '_Integral' must be available
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h: In member function 'size_t blurt::std::list<_Tp, _Alloc>::size() const':
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:660: error: 'distance' is not a member of 'blurt::std'
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h: In member function 'void blurt::std::list<_Tp, _Alloc>::swap(blurt::std::list<_Tp, _Alloc>&)':
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:896: error: '__alloc_swap' is not a member of 'blurt::std'
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:896: error: expected `(' before '>' token
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:897: error: '::_S_do_it' has not been declared
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h: In member function 'void blurt::std::list<_Tp, _Alloc>::_M_check_equal_allocators(blurt::std::list<_Tp, _Alloc>&)':
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:1180: error: there are no arguments to '__throw_runtime_error' that depend on a template parameter, so a declaration of '__throw_runtime_error' must be available
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h: In function 'bool blurt::std::operator<(const blurt::std::list<_Tp, _Alloc>&, const blurt::std::list<_Tp, _Alloc>&)':
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/stl_list.h:1226: error: 'lexicographical_compare' is not a member of 'blurt::std'
    In file included from c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/list:73,
                     from D:\works\coding\cpp\bluRT\src\/blurt/KdTreeHelper.h:11,
                     from D:\works\coding\cpp\bluRT\src\/blurt/KdTree.h:81,
                     from D:\works\coding\cpp\bluRT\src\/blurt/SpatialSubdivision.h:61,
                     from D:\works\coding\cpp\bluRT\src\/blurt/Raytracer.h:14,
                     from D:\works\coding\cpp\bluRT\src\Engine.cpp:12:
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/list.tcc: At global scope:
    c:/dev/mingw/bin/../lib/gcc/mingw32/4.2.1/../../../../include/c++/4.2.1/bits/list.tcc:159: error: '__false_type' has not been declared
    In file included from D:\works\coding\cpp\bluRT\src\/blurt/KdTree.h:81,
                     from D:\works\coding\cpp\bluRT\src\/blurt/SpatialSubdivision.h:61,
                     from D:\works\coding\cpp\bluRT\src\/blurt/Raytracer.h:14,
                     from D:\works\coding\cpp\bluRT\src\Engine.cpp:12:
    D:\works\coding\cpp\bluRT\src\/blurt/KdTreeHelper.h:24: error: expected initializer before '<' token
    D:\works\coding\cpp\bluRT\src\/blurt/KdTreeHelper.h:39: error: ISO C++ forbids declaration of 'ObjectList' with no type
    D:\works\coding\cpp\bluRT\src\/blurt/KdTreeHelper.h:39: error: expected ';' before '&' token
    

    Ich hab keine Ahnung was genau da falsch gelaufen ist, dementsprechend waer ich fuer Hilfe dankbar 🙂



  • Also bei mir compiliert es mit mingw32 problemlos durch.



  • hmm... hab schon fast befuerchtet dass der Fehler ganz wo anders liegt und das nur die Auswirkungen sind 😕



  • ... namespace 'blurt::std' ...

    Hast du evtl. die includes falsch positioniert, d.h. innerhalb deines Namespaces 'blurt'?


Anmelden zum Antworten