Sponsored Content
Top Forums Programming Problems with template instantiation in C++ Post 302346626 by MartinM09 on Sunday 23rd of August 2009 01:59:51 PM
Old 08-23-2009
Dear Gunther,

I will repeat the line numbered code here
Code:
   241  export template <class Ch, class Tr, class In, class Ef, typename SgF>  
   242  basic_istream<Ch, Tr> &dataScanStatus(                                  
   243                                  basic_istream<Ch, Tr> &is,              
   244                                  Ef &un_format, bool mandatory, SgF status) {                                                                            
   245          ios_base::iostate state = ios_base::goodbit;  // good           
   246          In eos;                                                         
   247                                                                          
   248                  (use_facet<Edifact_get<Ch, Tr, In> >(is.getloc()).*status)                                                                              
   249                                  (is, eos, is, state, un_format, mandatory);                                                                             
   250          return is;                                                      
   251  }                                                                       
   252                                                                          
   253  template istream &dataScanStatus<char, char_traits<char>,               
   254                   istreambuf_iterator<char, char_traits<char> >, ElementFormat,                                                                          
   255                  Typedefines<char>::SetGetElementFormat>(                
   256                                                  istream &is, ElementFormat &un_format,                                                                  
   257                                  bool mandatory, istreambuf_iterator<char, char_traits<char> >                                                           
   258                             (Edifact_get<char>::*sgef)(                  
   259                                             istreambuf_iterator<char, char_traits<char> > begin,                                                         
   260                                             istreambuf_iterator<char, char_traits<char> > end,                                                           
   261                                             basic_ios<char> &s, ios_base::iostate &r,                                                                    
   262                                             ElementFormat &token, bool mandatory));                                                                      
   263                                                                          
   264  export template <class Ch, class Tr, class In>                          
   265  basic_istream<Ch, Tr> &control(basic_istream<Ch, Tr> &is,               
   266                                  In (Edifact_get<Ch, Tr, In>::*terminator)(In begin,                                                                     
   267                                             In end, basic_ios<Ch, Tr> &s, ios_base::iostate &r)) {                                                       
   268          In eos;                                                         
   269          ios_base::iostate r = ios_base::goodbit;                        
   270                                                                          
   271                  (use_facet<Edifact_get<Ch, Tr, In> >(                   
   272                                                                  is.getloc()).*terminator)(is, eos, is, r);                                              
   273          return is;                                                      
   274  }                                                                       
   275                                                                          
   276  template istream &control<char, char_traits<char>,                      
   277                   istreambuf_iterator<char, char_traits<char> > >(istream &is,                                                                           
   278                                  istreambuf_iterator<char, char_traits<char> >                                                                           
   279                                  (Edifact_get<char>::*terminator)(       
   280                                                  istreambuf_iterator<char, char_traits<char> > begin,                                                    
   281                                                  istreambuf_iterator<char, char_traits<char> > end,                                                      
   282                                                  basic_ios<char> &s, ios_base::iostate &r));                                                             
   283  
   302  export template <class Ch, class Tr, class In>                          
   303  basic_istream<Ch, Tr> &begin_of_element(                                
   304                                  basic_istream<Ch, Tr> &is, ElementFormat &un_element,                                                                   
   305                                  bool mandatory) {                       
   306          return dataScanStatus(is, un_element, mandatory,                
   307                                          &Edifact_get<Ch, Tr, In>::begin_of_element);                                                                    
   308  }                                                                       
   309                                                                          
   310  template istream &begin_of_element<char, char_traits<char>,             
   311                   istreambuf_iterator<char, char_traits<char> > >(       
   312                                                   istream &is, ElementFormat &un_element,                                                                
   313                                  bool mandatory);

The stlfilt program produces following output
Code:
xing.class.cc: istreambuf_iterator<char, char_traits<char> > function ‘const
    string & Edifact::discriminante(                                        
        basic_istream<_CharT, _Traits> &, const string & (                  
            Edifact::Edifact_get<                                           
                char, char_traits<char>, istreambuf_iterator<               
                    char, char_traits<char> > >::*)(                        
            basic_ios<_CharT, _Traits> &)const)’:                           
xing.class.cc:190:   instantiated from here                                 
xing.class.cc:183: error: passing ‘const string’ as ‘this’ argument of      
    ‘string & string::operator=(const string &)’ discards qualifiers        
xing.class.cc: istreambuf_iterator<char, char_traits<char> > function ‘bool 
    Edifact::skipped(basic_istream<_CharT, _Traits> &)’:                    
xing.class.cc:209:   instantiated from here                                 
xing.class.cc:205: error: No match for ‘edifact_sibling(istream &)’         
xing.class.cc: istreambuf_iterator<char, char_traits<char> > function ‘bool 
    Edifact::omit(basic_istream<_CharT, _Traits> &)’:                       
xing.class.cc:220:   instantiated from here                                 
xing.class.cc:216: error: No match for ‘edifact_sibling(istream &)’         
xing.class.cc: istreambuf_iterator<char, char_traits<char> > function ‘bool 
    Edifact::exist(basic_istream<_CharT, _Traits> &)’:                      
xing.class.cc:226:   instantiated from here                                 
xing.class.cc:223: error: No match for ‘omit(istream &)’                    
xing.class.cc: istreambuf_iterator<char, char_traits<char>> function ‘      
    basic_istream<_CharT, _Traits> & Edifact::operator>>(                   
        basic_istream<_CharT, _Traits> &, basic_string<char, char_traits<char>>
        &)’:                                                                   
xing.class.cc:239:   instantiated from here                                    
xing.class.cc:233: error: passing ‘const Edifact::Edifact_get<                 
        char, char_traits<char>, istreambuf_iterator<char, char_traits<        
                char>>>’ as ‘this’ argument of ‘istreambuf_iterator<           
        char, char_traits<char>                                                
    > Edifact::Edifact_get<                                                    
        char, char_traits<char>, istreambuf_iterator<char, char_traits<char> > 
    >::get(                                                                    
        istreambuf_iterator<char, char_traits<char> >, istreambuf_iterator<    
            char, char_traits<char> >, basic_ios<_CharT, _Traits> &,           
        _Ios_Iostate &, basic_string<char, char_traits<char> > &)’ discards    
    qualifiers                                                                 
xing.class.cc: istreambuf_iterator<char, char_traits<char> > function ‘        
    basic_istream<_CharT, _Traits> & Edifact::dataScanStatus(                  
        basic_istream<_CharT, _Traits> &, Edifact::ElementFormat &, bool,      
        istreambuf_iterator<char, char_traits<char> > (                        
            Edifact::Edifact_get<                                              
                char, char_traits<char>, istreambuf_iterator<                  
                    char, char_traits<char> > >::*)(                           
            istreambuf_iterator<char, char_traits<char> >, istreambuf_iterator<
                char, char_traits<char> >, basic_ios<char, char_traits<char> > 
            &, _Ios_Iostate &, Edifact::ElementFormat &, bool))’:              
xing.class.cc:262:   instantiated from here                                    
xing.class.cc:248: error: invalid conversion from ‘const Edifact::Edifact_get< 
        char, char_traits<char>, istreambuf_iterator<char, char_traits<char> > 
    > *’ to ‘Edifact::Edifact_get<                                             
        char, char_traits<char>, istreambuf_iterator<char, char_traits<char> > 
    > *’                                                                       
xing.class.cc: istreambuf_iterator<char, char_traits<char> > function ‘        
    basic_istream<_CharT, _Traits> & Edifact::control(                         
        basic_istream<_CharT, _Traits> &, istreambuf_iterator<                 
            char, char_traits<char> > (                                        
            Edifact::Edifact_get<                                              
                char, char_traits<char>, istreambuf_iterator<                  
                    char, char_traits<char> > >::*)(                           
            istreambuf_iterator<char, char_traits<char> >, istreambuf_iterator<
                char, char_traits<char> >, basic_ios<_CharT, _Traits> &,       
            _Ios_Iostate &))’:
xing.class.cc:282:   instantiated from here
xing.class.cc:271: error: invalid conversion from ‘const Edifact::Edifact_get<
        char, char_traits<char>, istreambuf_iterator<char, char_traits<char> >
    > *’ to ‘Edifact::Edifact_get<
        char, char_traits<char>, istreambuf_iterator<char, char_traits<char> >
    > *’
xing.class.cc: istreambuf_iterator<char, char_traits<char> > function ‘
    basic_istream<_CharT, _Traits> & Edifact::monitoring(
        basic_istream<_CharT, _Traits> &, basic_string<char, char_traits<char>
        > &, void (
            Edifact::Edifact_get<
                char, char_traits<char>, istreambuf_iterator<
                    char, char_traits<char> > >::*)(
            basic_ios<char, char_traits<char> > &, _Ios_Iostate &, basic_string<
                char, char_traits<char> > &))’:
xing.class.cc:300:   instantiated from here
xing.class.cc:291: error: invalid conversion from ‘const Edifact::Edifact_get<
        char, char_traits<char>, istreambuf_iterator<char, char_traits<char> >
    > *’ to ‘Edifact::Edifact_get<
        char, char_traits<char>, istreambuf_iterator<char, char_traits<char> >
    > *’
xing.class.cc: istreambuf_iterator<char, char_traits<char> > function ‘
    basic_istream<_CharT, _Traits> & Edifact::begin_of_element(
        basic_istream<_CharT, _Traits> &, Edifact::ElementFormat &, bool)’:
xing.class.cc:313:   instantiated from here
xing.class.cc:307: error: No match for ‘dataScanStatus(
        istream &, Edifact::ElementFormat &, bool &, istreambuf_iterator<
            char, char_traits<char> > (
            Edifact::Edifact_get<
                char, char_traits<char>, istreambuf_iterator<
                    char, char_traits<char> > >::*)(
            istreambuf_iterator<char, char_traits<char> >, istreambuf_iterator<
                char, char_traits<char> >, basic_ios<char, char_traits<char> >
            &, _Ios_Iostate &, Edifact::ElementFormat &, bool))’
xing.class.cc:248: error: invalid conversion from ‘const Edifact::Edifact_get< 
        char, char_traits<char>, istreambuf_iterator<char, char_traits<char> > 
    > *’ to ‘Edifact::Edifact_get<                                             
        char, char_traits<char>, istreambuf_iterator<char, char_traits<char> > 
    > *’                                                                       
xing.class.cc: istreambuf_iterator<char, char_traits<char> > function ‘        
    basic_istream<_CharT, _Traits> & Edifact::control(                         
        basic_istream<_CharT, _Traits> &, istreambuf_iterator<                 
            char, char_traits<char> > (                                        
            Edifact::Edifact_get<                                              
                char, char_traits<char>, istreambuf_iterator<                  
                    char, char_traits<char> > >::*)(                           
            istreambuf_iterator<char, char_traits<char> >, istreambuf_iterator<
                char, char_traits<char> >, basic_ios<_CharT, _Traits> &,       
            _Ios_Iostate &))’:

The function dataScanStatus() is defined in line 241 and instantiated in line 253.
The function control is defined in 264 and instantiated in line 276.
I don't can see the mistake and I hope you can give me any hint.

MartinM09
 

6 More Discussions You Might Find Interesting

1. Programming

About template constraints

Hi, i have class template, 1)can i override the copy constructor 2)can we have virtual function in class template if not plz tel why? I tried , compile error comes for me... Thanks Sarwan (0 Replies)
Discussion started by: sarwan
0 Replies

2. UNIX for Dummies Questions & Answers

vi calling template

Hello. I want to copy temp files when I make a new file by vi. For example, 09:32:52 ~/ $ mkdir test 09:33:03 ~/ $ cd test/ 09:33:09 ~/test/ $ ls 09:33:16 ~/test/ $ vi test.cpp 09:34:37 ~/test/ $ cat test.cpp #include <iostream> int main() { } 09:34:48 ~/test/ $ vi test.bash 09:35:19... (1 Reply)
Discussion started by: Euler04
1 Replies

3. Programming

Template problem ...

Hi all, Need your help. I am doing a simple template program , getting some error ... here is the code #include <iostream> #include <stdio.h> #include <stdlib.h> #include<iostream> #include<string> #include <sstream> using namespace std; class Base_class { public: Base_class(){... (1 Reply)
Discussion started by: amartya_sock
1 Replies

4. Shell Programming and Scripting

Help with template like solution

hi experts, i'm trying to do this: file1 is a template. might have kinds of 'funny' characters. sample: <body> <form> <p><input type="text" name="abc"/></p> &nbsp; <p><my_content></p> </form> </body> file2 is a file that contains lots of text. this might be very big. might have... (2 Replies)
Discussion started by: xjohnu
2 Replies

5. Programming

C++ template error

I get some compiling errors about template instantiation :wall: , but I can't find where the syntax errors happens. Can some help me? template<typename Type> class SingleList; template<typename Type> class SingleListNode{ private: friend class SingleList<Type>; SingleListNode() :... (1 Reply)
Discussion started by: 915086731
1 Replies

6. Programming

Calling template at once

Hello Again, I am just wanted to know if we can call the Template using "require_once" at PHP? Any views around happy to discuss. Thanks in Advance (2 Replies)
Discussion started by: AimyThomas
2 Replies
All times are GMT -4. The time now is 02:53 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy