std::string und andere std::-Typen auf dem Mac ?



  • Servus,

    ich hab hier Code der auf Windows und Linux anstandslos kompiliert, auf einem Intel-Mac aber ums verrecken nicht kompiliert, wenn ich includes aus der Standardbibliothek verwende.

    Beispiel: Ich inklude string und mache eine Klasse die einen std::string als member hat.
    Habe gegoogelt und verschiedene tipps gefunden, "using namespace std" zu machen. Aber genau das will ich nicht. Ich mache keine namespace angabe und schreibe immer brav std:: davor!
    Zweiter tipp war, dass man "rekursives inkluden" einstellen soll. Was ist das und wie geht das bem gcc?

    Folgende Meldung beim kompilieren:

    g++ -c -pipe -Wall -Wextra -Wnon-virtual-dtor -Os -Wall -W -fPIC -D__cplusplus -DAPL=1 -DIBM=0 -DLIN=0 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.4.0/mkspecs/macx-g++ -I. -I/usr/local/Trolltech/Qt-4.4.0/lib/QtCore.framework/Versions/4/Headers -I/usr/local/Trolltech/Qt-4.4.0/include/QtCore -I/usr/local/Trolltech/Qt-4.4.0/include/QtCore -I/usr/local/Trolltech/Qt-4.4.0/lib/QtNetwork.framework/Versions/4/Headers -I/usr/local/Trolltech/Qt-4.4.0/include/QtNetwork -I/usr/local/Trolltech/Qt-4.4.0/include/QtNetwork -I/usr/local/Trolltech/Qt-4.4.0/lib/QtGui.framework/Versions/4/Headers -I/usr/local/Trolltech/Qt-4.4.0/include/QtGui -I/usr/local/Trolltech/Qt-4.4.0/include/QtGui -I/usr/local/Trolltech/Qt-4.4.0/include -Iinclude/XPLM -I../vaslib/src -I. -I. -F/usr/local/Trolltech/Qt-4.4.0/lib -o datacontainer.o datacontainer.cpp
    /usr/include/c++/4.0.0/bits/char_traits.h: In static member function ‘static typename __gnu_cxx::char_traits<_CharT>::char_type* __gnu_cxx::char_traits<_CharT>::copy(_CharT*, const _CharT*, size_t)’:
    /usr/include/c++/4.0.0/bits/char_traits.h:195: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/char_traits.h: In static member function ‘static typename __gnu_cxx::char_traits<_CharT>::char_type* __gnu_cxx::char_traits<_CharT>::assign(_CharT*, size_t, _CharT)’:
    /usr/include/c++/4.0.0/bits/char_traits.h:204: error: ‘fill_n’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_uninitialized.h: In function ‘_ForwardIterator std::__uninitialized_copy_aux(_InputIterator, _InputIterator, _ForwardIterator, __true_type)’:
    /usr/include/c++/4.0.0/bits/stl_uninitialized.h:74: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_uninitialized.h: In function ‘void std::__uninitialized_fill_aux(_ForwardIterator, _ForwardIterator, const _Tp&, __true_type)’:
    /usr/include/c++/4.0.0/bits/stl_uninitialized.h:138: error: ‘fill’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_uninitialized.h: In function ‘void std::__uninitialized_fill_n_aux(_ForwardIterator, _Size, const _Tp&, __true_type)’:
    /usr/include/c++/4.0.0/bits/stl_uninitialized.h:183: error: ‘fill_n’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/basic_string.h: In member function ‘int std::basic_string<_CharT, _Traits, _Alloc>::compare(const std::basic_string<_CharT, _Traits, _Alloc>&) const’:
    /usr/include/c++/4.0.0/bits/basic_string.h:1917: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_ForwardIterator2 std::swap_ranges(_ForwardIterator1, _ForwardIterator1, _ForwardIterator2)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:756: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘void std::__reverse(_BidirectionalIterator, _BidirectionalIterator, std::bidirectional_iterator_tag)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:1422: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘void std::__reverse(_RandomAccessIterator, _RandomAccessIterator, std::random_access_iterator_tag)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:1444: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_OutputIterator std::rotate_copy(_ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:1739: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘void std::random_shuffle(_RandomAccessIterator, _RandomAccessIterator)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:1763: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘void std::random_shuffle(_RandomAccessIterator, _RandomAccessIterator, _RandomNumberGenerator&)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:1792: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_BidirectionalIterator std::__partition(_BidirectionalIterator, _BidirectionalIterator, _Predicate, std::bidirectional_iterator_tag)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:1854: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_ForwardIterator std::__stable_partition_adaptive(_ForwardIterator, _ForwardIterator, _Predicate, _Distance, _Pointer, _Distance)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:1947: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_RandomAccessIterator std::__unguarded_partition(_RandomAccessIterator, _RandomAccessIterator, _Tp)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:2038: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_RandomAccessIterator std::__unguarded_partition(_RandomAccessIterator, _RandomAccessIterator, _Tp, _Compare)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:2063: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:2136: error: ‘copy_backward’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:2162: error: ‘copy_backward’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘void std::__merge_without_buffer(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Distance, _Distance)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:2830: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘void std::__merge_without_buffer(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Distance, _Distance, _Compare)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:2879: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_OutputIterator std::merge(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:3008: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3008: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_OutputIterator std::merge(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator, _Compare)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:3067: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3067: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘void std::__merge_sort_loop(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, _Distance)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:3089: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘void std::__merge_sort_loop(_RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, _Distance, _Compare)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:3112: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_BidirectionalIterator3 std::__merge_backward(_BidirectionalIterator1, _BidirectionalIterator1, _BidirectionalIterator2, _BidirectionalIterator2, _BidirectionalIterator3)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:3215: error: ‘copy_backward’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3217: error: ‘copy_backward’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3226: error: ‘copy_backward’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3233: error: ‘copy_backward’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_BidirectionalIterator3 std::__merge_backward(_BidirectionalIterator1, _BidirectionalIterator1, _BidirectionalIterator2, _BidirectionalIterator2, _BidirectionalIterator3, _Compare)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:3255: error: ‘copy_backward’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3257: error: ‘copy_backward’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3266: error: ‘copy_backward’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3273: error: ‘copy_backward’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_BidirectionalIterator1 std::__rotate_adaptive(_BidirectionalIterator1, _BidirectionalIterator1, _BidirectionalIterator1, _Distance, _Distance, _BidirectionalIterator2, _Distance)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:3297: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3298: error: ‘copy_backward’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3299: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3303: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3304: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3305: error: ‘copy_backward’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘void std::__merge_adaptive(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Distance, _Distance, _Pointer, _Distance)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:3331: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3336: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘void std::__merge_adaptive(_BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Distance, _Distance, _Pointer, _Distance, _Compare)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:3391: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:3396: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_OutputIterator std::set_union(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:4123: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:4123: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_OutputIterator std::set_union(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator, _Compare)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:4186: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:4186: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_OutputIterator std::set_difference(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:4348: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_OutputIterator std::set_difference(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator, _Compare)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:4407: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_OutputIterator std::set_symmetric_difference(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:4464: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:4464: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘_OutputIterator std::set_symmetric_difference(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator, _Compare)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:4527: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h:4527: error: ‘copy’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘bool std::next_permutation(_BidirectionalIterator, _BidirectionalIterator)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:4684: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘bool std::next_permutation(_BidirectionalIterator, _BidirectionalIterator, _Compare)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:4741: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘bool std::prev_permutation(_BidirectionalIterator, _BidirectionalIterator)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:4795: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_algo.h: In function ‘bool std::prev_permutation(_BidirectionalIterator, _BidirectionalIterator, _Compare)’:
    /usr/include/c++/4.0.0/bits/stl_algo.h:4852: error: ‘iter_swap’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/basic_string.tcc: In member function ‘typename std::basic_string<_CharT, _Traits, _Alloc>::size_type std::basic_string<_CharT, _Traits, _Alloc>::rfind(const _CharT*, typename _Alloc::size_type, typename _Alloc::size_type) const’:
    /usr/include/c++/4.0.0/bits/basic_string.tcc:753: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/basic_string.tcc: In member function ‘int std::basic_string<_CharT, _Traits, _Alloc>::compare(typename _Alloc::size_type, typename _Alloc::size_type, const std::basic_string<_CharT, _Traits, _Alloc>&) const’:
    /usr/include/c++/4.0.0/bits/basic_string.tcc:890: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/basic_string.tcc: In member function ‘int std::basic_string<_CharT, _Traits, _Alloc>::compare(typename _Alloc::size_type, typename _Alloc::size_type, const std::basic_string<_CharT, _Traits, _Alloc>&, typename _Alloc::size_type, typename _Alloc::size_type) const’:
    /usr/include/c++/4.0.0/bits/basic_string.tcc:907: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/basic_string.tcc: In member function ‘int std::basic_string<_CharT, _Traits, _Alloc>::compare(const _CharT*) const’:
    /usr/include/c++/4.0.0/bits/basic_string.tcc:923: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/basic_string.tcc: In member function ‘int std::basic_string<_CharT, _Traits, _Alloc>::compare(typename _Alloc::size_type, typename _Alloc::size_type, const _CharT*) const’:
    /usr/include/c++/4.0.0/bits/basic_string.tcc:939: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/basic_string.tcc: In member function ‘int std::basic_string<_CharT, _Traits, _Alloc>::compare(typename _Alloc::size_type, typename _Alloc::size_type, const _CharT*, typename _Alloc::size_type) const’:
    /usr/include/c++/4.0.0/bits/basic_string.tcc:955: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/streambuf.tcc: In member function ‘virtual std::streamsize std::basic_streambuf<_CharT, _Traits>::xsgetn(_CharT*, std::streamsize)’:
    /usr/include/c++/4.0.0/bits/streambuf.tcc:59: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/streambuf.tcc: In member function ‘virtual std::streamsize std::basic_streambuf<_CharT, _Traits>::xsputn(const _CharT*, std::streamsize)’:
    /usr/include/c++/4.0.0/bits/streambuf.tcc:93: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/locale_facets.tcc: In member function ‘_InIter std::time_get<_CharT, _InIter>::_M_extract_name(_InIter, _InIter, int&, const _CharT**, size_t, std::ios_base&, std::_Ios_Iostate&) const’:
    /usr/include/c++/4.0.0/bits/locale_facets.tcc:2048: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/locale_facets.tcc: In function ‘bool std::__verify_grouping(const char*, size_t, const std::string&)’:
    /usr/include/c++/4.0.0/bits/locale_facets.tcc:2490: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/istream.tcc: In member function ‘std::streamsize std::basic_istream<_CharT, _Traits>::readsome(_CharT*, std::streamsize)’:
    /usr/include/c++/4.0.0/bits/istream.tcc:847: error: ‘min’ is not a member of ‘std’
    /usr/include/c++/4.0.0/bits/stl_list.h: In function ‘bool std::operator<(const std::list<_Tp, _Alloc>&, const std::list<_Tp, _Alloc>&)’:
    /usr/include/c++/4.0.0/bits/stl_list.h:1208: error: ‘lexicographical_compare’ is not a member of ‘std’
    

    Wie ihr sehen könnt, wird noch nicht einmal auf die Zeile in meinem Code hingewiesen, aus der der Fehler kommt, es geht gleich mit "copy is not a member of std" los.

    EDIT: Hier noch die gcc-version:

    gcc -v
    Using built-in specs.
    Target: i686-apple-darwin9
    Configured with: /var/tmp/gcc/gcc-5465~16/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin9 --with-arch=apple --with-tune=generic --host=i686-apple-darwin9 --target=i686-apple-darwin9
    Thread model: posix
    gcc version 4.0.1 (Apple Inc. build 5465)
    

    Plz help



  • Du solltest trotzdem mal deinen Code zeigen.

    Klappt den das kompilieren einer einfachen Datei, ohne QT-Zeugs?



  • Das lustige ist, das sämtliches QT-geraffel anstandslos kompiliert. Es kracht in einer Stelle des Projekts, wo meilenweit kein Qt ist, nur standard-template-library sachen.



  • The-Kenny schrieb:

    Du solltest trotzdem mal deinen Code zeigen.

    Klappt den das kompilieren einer einfachen Datei, ohne QT-Zeugs?

    Wenn das zuviel verlangt ist, kannst du mal probieren die neueste Xcode-Version (und damit GCC 4.2.1) zu installieren, und es damit zu probieren.

    (Auch wenn ich hier nie Probleme mit 4.0.1 hatte)



  • möglich, dass irgendwas mit dem Projekteinstellungen oder der Konfiguration Deiner Entwicklungsumgebung nicht passt.

    Probier' bitte mal ein kleines cpp-File (innerhalb Deines Projekts) zu übersetzen, in dem eine Funktion und/oder Klasse mit std::string drin vorkommt.

    Gruß
    Werner



  • Also wenn ich dieses hier mache:

    #include <string>
    
    class foo{
    std::string bar;
    };
    

    und dann gcc -o test.o test.cpp

    kompiliert das anstandslos.

    Ich habe hier eher das Gefühl dass die Build-reihenfolge nicht stimmt:
    die oben angesprochene Datei sieht so aus:

    #ifndef datacontainer_h
    #define datacontainer_h
    
    #include <vector>
    #include <utility>
    #include <queue>
    #include <iostream>
    
    #include "datatosend.h"
    
    using std::pair;
    using std::queue;
    
    template <typename T>
    class DataContainer : private std::vector<DataToSend<T> > {
    
     public:
    
        DataContainer();
    
        void addDataRef(unsigned char id, short readWrite, const std::string& name,
                                const std::string& dataRefIdentifier, unsigned char prio = PrioType::Constant,
                                double eps=2^(-8), double scale = 1.0, double offset = 0.0)
    
    // verschiedenes anderes zeugs.
    
    };
    

    Mein gesunder Menschenverstand sagt mir, dass er ja zuerstmal die datatosend bauen müsste, bevor er den datacontainer anfängt. Macht er aber nicht. Er fängt an mit dieser Datei und scheitert (vermutlich) am std::string.



  • Werner Salomon schrieb:

    möglich, dass irgendwas mit dem Projekteinstellungen oder der Konfiguration Deiner Entwicklungsumgebung nicht passt.

    Probier' bitte mal ein kleines cpp-File (innerhalb Deines Projekts) zu übersetzen, in dem eine Funktion und/oder Klasse mit std::string drin vorkommt.

    Gruß
    Werner

    guter input!

    Habe meinem Projekt eine Klasse test hizugefügt:

    test.cpp:
    #include "test.h"
    
    test.h:
    #ifndef TEST_H
    #define TEST_H
    
    #include <string>
    
    class Test
    {
    public:
        Test();
        private:
        std::string foo;
    };
    
    #endif // TEST_H
    

    ausgabe:

    g++ -c -pipe -Wall -Wextra -Wnon-virtual-dtor -Os -Wall -W -fPIC -D__cplusplus -DAPL=1 -DIBM=0 -DLIN=0 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.4.0/mkspecs/macx-g++ -I. -I/usr/local/Trolltech/Qt-4.4.0/lib/QtCore.framework/Versions/4/Headers -I/usr/local/Trolltech/Qt-4.4.0/include/QtCore -I/usr/local/Trolltech/Qt-4.4.0/include/QtCore -I/usr/local/Trolltech/Qt-4.4.0/lib/QtNetwork.framework/Versions/4/Headers -I/usr/local/Trolltech/Qt-4.4.0/include/QtNetwork -I/usr/local/Trolltech/Qt-4.4.0/include/QtNetwork -I/usr/local/Trolltech/Qt-4.4.0/lib/QtGui.framework/Versions/4/Headers -I/usr/local/Trolltech/Qt-4.4.0/include/QtGui -I/usr/local/Trolltech/Qt-4.4.0/include/QtGui -I/usr/local/Trolltech/Qt-4.4.0/include -Iinclude/XPLM -I../vaslib/src -I. -I. -F/usr/local/Trolltech/Qt-4.4.0/lib -o test.o test.cpp
    /usr/local/Trolltech/Qt-4.4.0/include/QtCore/qstring.h: In member function ‘std::string QString::toStdString() const’:
    /usr/local/Trolltech/Qt-4.4.0/include/QtCore/qstring.h:991: error: return type ‘struct std::string’ is incomplete
    /usr/local/Trolltech/Qt-4.4.0/include/QtCore/qstring.h:992: error: invalid use of undefined type ‘struct std::string’
    /usr/include/c++/4.0.0/bits/stringfwd.h:56: error: declaration of ‘struct std::string’
    /usr/local/Trolltech/Qt-4.4.0/include/QtCore/qstring.h: In static member function ‘static QString QString::fromStdString(const std::string&)’:
    /usr/local/Trolltech/Qt-4.4.0/include/QtCore/qstring.h:995: error: invalid use of undefined type ‘const struct std::basic_string<char, std::char_traits<char>, std::allocator<char> >’
    /usr/include/c++/4.0.0/bits/stringfwd.h:56: error: declaration of ‘const struct std::basic_string<char, std::char_traits<char>, std::allocator<char> >’
    
    usw. usw.
    

    Seitens der Entwicklungsumgebung hab ich nichts einzustelle, ich kompiliere von der kommandozeile. qmake macht mir das makefile und dann mach ich darauf make.

    EDIT: @Xcode: XCode 3.1.2 : 530 of 996MB (679KB/sec) - 11 Minutes Remaining
    Müssen entwicklngsumgebungen sooo groß sein??? Warum können die nicht einfach einen download von gcc 4.3.3 für apple anbieten...



  • Könntest du bitte darauf verzichten überlange Fehlerlogs zu posten. In der Regel reichen die ersten 5-10 Zeilen.



  • Wie kann es sein, dass nach einem einsamen #include <string> eine Meldung aus

    /usr/local/Trolltech/Qt-4.4.0/include/QtCore/qstring.h:991: ...
    

    erscheint.
    Kann es sein, dass Du eine Datei 'string' irgendwo rumliegen hast, die da gar nicht hingehört und die dann auch noch Dinge aus QT inkludiert. Also ist die <string>-Datei auch wirklich Teil der mitgelieferten C++-Library?

    Gruß
    Werner



  • Die genannte test.cpp ist Bestandteil des Qt-Projektes. Das -ITrolltech- Zeug kommt automatisch mit.



  • Ich hab jetzt mal verschiedene Tests durchgeführt:

    -test.h und test.cpp wie oben angegeben in ein Verzeichnis. Dann über die Kommandozeile gcc -o test.o test.cpp -> Ergebnis: Kompiliert, ld mault wegen fehlender main, also alles okay.
    -Dann das ganze mit qt:
    im obigen verzeichnis qmake -project, erzeugt ein .pro mit den Headern und sourcen, dann qmake, dann make. -> Ergebnis: Wie oben, kompiliert, wieder meldung über fehlende main. An Qt selbst kann's also nicht liegen.
    -test.h und cpp in mein Arbeitsverzeichnis kopiert, test.cpp und .h im .pro-File meines Projekts eingefügt -> Ergebnis: Es knallt. "copy is not a member of std::" Aus der qstring.h - wo kommt die her? Ich inklude die string.h !!
    -Also meine Projekteinstellungen gelöscht und qmake -project ein neues .pro anlegen lassen. Qmake und make -> Es knallt wieder aus der qstring.h. WTF???

    Es gibt in meinem Qt-include verzeichnis keine string.h, nur eine qstring.h
    Es gibt in meinem Projektverzeichnis keine string.h

    Probiert habe ich es mit Qt 4.3.3, dann hab ich mir Qt4.4.3 aus den Quellen kompiliert und es damit versucht - Verhalten identisch. Neues XCode hab ich installiert - aber bekomme nachwievor nur gcc 4.0.1 ist das normal?

    Ich bin mit meinem Latein echt am ende!



  • Wäre es nicht sinnvoll mit nem C++ Compiler zu kompilieren? gcc ist doch ein C-Compiler. Muss man da nicht g++ benutzen?



  • Sorry, natürlich, ich meine ja g++...
    Das Makefile, was Qt erzeugt, benutzt natürlich auch den g++



  • PhilippM schrieb:

    "copy is not a member of std::" Aus der qstring.h - wo kommt die her? Ich inklude die string.h !!

    1. <string> und nicht <string.h> und
    2. <algorithm> fuer std::copy



  • Vermutlich fehlen "includes" in deinem Source.
    Also z.B. <algorithm> und ggf. noch ein paar andere.



  • Hab den Fehler gefunden.

    Das Problem lag in einer Datei in meinem Projekt namens assert.h in der ich eine eigenes Makro definiert habe, was fehlgeschlagene asserts in einer Datei mitloggt - unter Einsatz von QFile und QTextStream.
    Diese Datei ist natürlich mit
    #ifndef ASSERT_H
    #define ASSERT_H
    #endif

    geguardet. Und scheinbar kollidiert diese assert.h mit einer systeminterenen assert.h - durch den guard werden andere Sachen nicht eingebaut.
    Nachdem ich die Datei in myassert.h umbenannt und den inklude-guard entsprechend angepasst habe, kompiliert es anstandslos.
    Darauf muss man erstmal kommen.



  • Super!

    Sehr schönes Beispiel dafür, dass man seine Includeguards wirklich sehr willkürlich und einmalig wählen sollte. 🙂



  • PhilippM schrieb:

    Darauf muss man erstmal kommen.

    Deshalb verwendet man vernuenftige include guards.
    ASSERT_H bettelt doch um probleme.

    ich verwende zB
    <projektname><pfad><dateiname>_INCLUDED

    manche leute lassen sich die include guards auch automatisch generieren, so dass man zufaellige zeichen im guard stehen hat.

    auche in MYASSERT_H (dazu musst du die datei uebrigens nicht umbenenen) bettelt um probleme...



  • Ich verwende neuerdings (wenn ich nicht pragma once verwenden darf/kann) INCLUDED_PROJECT_FILEPATH_FILENAME_EXT . Das hat den Vorteil dass alle Header-Guards in alphabetisch sortierten Listen zusammen stehen, so dass man "echte" Makros schneller findet, und die sich nicht zwischen den ganzen Header-Guards verlieren.


  • Administrator

    Oder auch noch eine Möglichkeit, vor allem um die ellenlange Pfade abzukürzen:
    H_<projektkürzel>_<dateiname>_GUARD__<datum & zeit alles an einem Stück>

    Bsp:
    H_MLL_PARKING_DLG_GUARD__20090614173821

    Es ist ziemlich unwahrscheinlich, dass jemand in der genau gleichen Sekunde den gleichen Header Guard erstellt 🙂
    Die von hustbear angesprochene Sortierung ist hier übrigens auch vorhanden.

    Grüssli


Anmelden zum Antworten