template & STL

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • dawid

    template & STL

    Hi, I'm trying to compile this template:

    1 #include <set>
    2
    3 using std::set;
    4
    5 template <class TYPE>
    6 void function(const set<TYPE&data) {
    7 for (set<TYPE>::con st_iterator iter = data.begin(); iter !=
    data.end(); iter++) {
    8 }
    9 }

    g++ 4.2.3 prints:
    g++ temp.cpp -o temp
    temp.cpp: In function ‘void function(const std::set<TYPE,
    std::less<_Key> , std::allocator< _CharT&)’:
    temp.cpp:7: error: expected `;' before ‘iter’
    temp.cpp:7: error: ‘iter’ was not declared in this scope
    make: *** [temp] Error 1

    What is wrong ??

    regards
  • joe

    #2
    Re: template &amp; STL

    On Sep 19, 1:44 pm, dawid <Dawid.Sierad.. .@gmail.comwrot e:
    Hi, I'm trying to compile this template:
    >
      1 #include <set>
      2
      3 using std::set;
      4
      5 template <class TYPE>
      6 void function(const set<TYPE&data) {
      7   for (set<TYPE>::con st_iterator iter = data.begin(); iter !=
    data.end(); iter++) {
      8   }
      9 }
    >
    g++ 4.2.3 prints:
    g++     temp.cpp   -o temp
    temp.cpp: In function ‘void function(const std::set<TYPE,
    std::less<_Key> , std::allocator< _CharT&)’:
    temp.cpp:7: error: expected `;' before ‘iter’
    temp.cpp:7: error: ‘iter’ was not declared in this scope
    make: *** [temp] Error 1
    >
    What is wrong ??
    >
    regards
    You have to give the compiler a hint here.
    Try adding the "typename" keyword :
    for (typename set<TYPE>::cons t_iterator iter ...

    It's just one of those things you have to train yourself to think of
    when you see an error message like that in a template.
    It's sort of like remembering when e comes before i.
    Joe Cook

    Comment

    • peter koch

      #3
      Re: template &amp; STL

      On 19 Sep., 19:44, dawid <Dawid.Sierad.. .@gmail.comwrot e:
      Hi, I'm trying to compile this template:
      >
        1 #include <set>
        2
        3 using std::set;
        4
        5 template <class TYPE>
        6 void function(const set<TYPE&data) {
        7   for (set<TYPE>::con st_iterator iter = data.begin(); iter !=
      data.end(); iter++) {
        8   }
        9 }
      >
      g++ 4.2.3 prints:
      g++     temp.cpp   -o temp
      temp.cpp: In function ‘void function(const std::set<TYPE,
      std::less<_Key> , std::allocator< _CharT&)’:
      temp.cpp:7: error: expected `;' before ‘iter’
      temp.cpp:7: error: ‘iter’ was not declared in this scope
      make: *** [temp] Error 1
      >
      What is wrong ??
      You forgot a typename: line 7 should read:
      for (typename set<TYPE>::cons t_iterator iter = data.begin(); iter !
      =

      The reason is template specialisation: a template class could be
      specialised, meaning that set<TYPEmight not have a const_iterator.
      You and I know that this is silly for std::set, but the compiler does
      not.

      /Peter

      Comment

      Working...