c++ syntax: iterator fuer struct in template Klasse

Dieses Thema im Forum "C/C++" wurde erstellt von rikola, 28.01.2008.

  1. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Hallo,

    ich versuche, fuer eine template-Klasse, die ein struct enthaelt, eine iterator zu deklarieren, doch laut g++ bekomme ich die Syntax nicht hin:
    Code:
    #include <vector>
    
    template <typename T> class A{
        private:
            struct B {
                float x;
            };
            B b;
        public:
            A(float x){b.x = x;}
            ~A(){}
            void f();
    };
    
    template <class T> void A<T>::f() {
        //std::vector<B>::iterator bs; //<- g++ schlaegt hier folgendes vor:
        typename std::vector<A<T>::B,std::allocator<A<T>::B> >::iterator it;
    }
    
    int main()
    {
        A<float> a(3.2);
        return 0;
    }
    
    Der Code funktioniert, solange ich in f() den iterator nicht deklariere. Mit der auskommentierten Syntax schlaegt g++ die im momentan angegebene Syntax zwar vor, ist damit aber auch nicht zufrieden:
    Code:
    templ.cpp: In member function 'void A<T>::f()':
    templ.cpp:19: error: type/value mismatch at argument 1 in template parameter list for 'template<class _Alloc> class std::allocator'
    templ.cpp:19: error:   expected a type, got 'A<T>::B'
    templ.cpp:19: error: type/value mismatch at argument 1 in template parameter list for 'template<class _Tp, class _Alloc> class std::vector'
    templ.cpp:19: error:   expected a type, got 'A<T>::B'
    templ.cpp:19: error: template argument 2 is invalid
    templ.cpp:19: error: invalid type in declaration before ';' token
    templ.cpp: In member function 'void A<T>::f() [with T = float]':
    templ.cpp:29:   instantiated from here
    templ.cpp:19: warning: unused variable 'it'
    
    Koennte mir jemand die korrekte Syntax verraten? Der intel-compiler akzeptier die auskommentierte Version, doch laut c++ FAQ ist das nicht Standardkonform.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 HPollak, 28.01.2008
    HPollak

    HPollak Foren As

    Dabei seit:
    21.12.2007
    Beiträge:
    93
    Zustimmungen:
    0
    Kann es sein das du ein ">" vergessen hast???

    z.B.:

    template <class T> void A<T>::f() {
    //std::vector<B>::iterator bs; //<- g++ schlaegt hier folgendes vor:
    typename std::vector<A<T>>::B,std::allocator<A<T>::B> >::iterator it;
    }

    oder

    template <class T> void A<T>::f() {
    //std::vector<B>::iterator bs; //<- g++ schlaegt hier folgendes vor:
    typename std::vector<A<T>::B>
    ,std::allocator<A<T>::B> >::iterator it;
    }
     
  4. #3 der_Kay, 28.01.2008
    Zuletzt bearbeitet: 28.01.2008
    der_Kay

    der_Kay Doppel-As

    Dabei seit:
    28.02.2006
    Beiträge:
    140
    Zustimmungen:
    0
    PHP:
    template <typename Tvoid A<T>::f() {
       
    typename std::vector<typename A::B>::iterator bs;
    }
    GCC (bei mir 4.2.1) kommt bei diesem Konstrukt bei der automatischen Typerkennung durcheinander und deshalb müssen die Typen an beiden Stellen mit typename und der innere Typ A::B mit voll qualifiziertem Namen markiert werden.

    Der Microsoft C++-Compiler akzeptiert Dein Ausgangskonstrukt übrigens auch ohne Murren.
     
Thema:

c++ syntax: iterator fuer struct in template Klasse

Die Seite wird geladen...

c++ syntax: iterator fuer struct in template Klasse - Ähnliche Themen

  1. Wie ermittle ich die Differenz zwischen 2 Zahlen unter AIX (Syntax ähnl. wie LINUX) ?

    Wie ermittle ich die Differenz zwischen 2 Zahlen unter AIX (Syntax ähnl. wie LINUX) ?: Wie ermittle ich die Differenz zwischen 2 Zahlen unter AIX (Syntax ähnl. wie LINUX) ? Und wenn die Differenz nicht "0" ist, dann folgt Aktion ...
  2. syntax error near unexpected token `&'

    syntax error near unexpected token `&': Hallo Ich habe ein Scrip angepasst bzw. erweiter und habe nun an einer Stelle ein Problem. Vor der erweiterung ist es einwandfrei...
  3. Wie Dateien in 2 versch. Ordenern unter AIX (Syntax ähnl. wie LINUX) löschen ?

    Wie Dateien in 2 versch. Ordenern unter AIX (Syntax ähnl. wie LINUX) löschen ?: Aufgrund der hohen Anzahl von Logfiles sortieren wir diese zur Rechercheerleichterung in 2 unterschiedl Ordner. Einmal werden sie nach Datum...
  4. Bilfe bei 1064 - You have an error in your SQL syntax; check the manuel that correspo

    Bilfe bei 1064 - You have an error in your SQL syntax; check the manuel that correspo: Hallo habe ein Kleines Problem kann mir einer helfen so bald ich ein volle rechte geben will mach er das da er ja in EVENT und TRIGGER nichts...
  5. hat sich an der Syntax von ntfs-3g was geändert ?

    hat sich an der Syntax von ntfs-3g was geändert ?: Hallo Hat sich an d er syntax von ntfs-3g was geändert ? ein mounten per ntfs-3gschlägt fehl ---------- root@nathan64:/home/joerg# mount...