home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / gnu / g / help / 1029 < prev    next >
Encoding:
Text File  |  1992-07-23  |  1.8 KB  |  73 lines

  1. Newsgroups: gnu.g++.help
  2. Path: sparky!uunet!mcsun!Germany.EU.net!news.netmbx.de!zrz.tu-berlin.de!math.fu-berlin.de!informatik.tu-muenchen.de!rz.uni-passau.de!kirk.fmi.uni-passau.de!funke
  3. From: funke@kirk.fmi.uni-passau.de (Christian Funke)
  4. Subject: templates and friends
  5. Message-ID: <1992Jul23.153433.16929@tom.rz.uni-passau.de>
  6. Sender: news@tom.rz.uni-passau.de (News-Operator)
  7. Nntp-Posting-Host: calvin.fmi.uni-passau.de
  8. Organization: University of Passau, Germany
  9. Date: Thu, 23 Jul 1992 15:34:33 GMT
  10. Lines: 61
  11.  
  12. Hi there!
  13.  
  14. I have read  there are problems with gcc-2.1 and template classes, which
  15. define non-inline element functions. Does anyone know, if there are problems
  16. generating friend functions for template classes?
  17. How can I correctly build something like that:
  18.  
  19. #include <iostream.h>
  20.  
  21. template <class A, class B>
  22. class hubo {
  23.    A avar;
  24.    B bvar;
  25.   public:
  26.    hubo(void):avar(0),bvar(0) {}
  27.    hubo(A a, B b):avar(a), bvar(b) {}
  28.    friend ostream& operator<<(ostream& o, hubo& h);
  29.    
  30.    friend istream& operator>>(istream& i, hubo& h)
  31.      {
  32.        return i >> h.avar >> h.bvar ;
  33.        
  34.      }
  35. };
  36.  
  37.  
  38. ostream& operator<<(ostream& o,  hubo< WHAT_COMES, HERE? >& h)
  39. {
  40.   return o << "Hubo[" << h.avar << ',' << h.bvar << "]\n";
  41. }
  42.  
  43. main()
  44. {
  45.   hubo<double,int> C;
  46.   
  47.   cout << C << '\n';
  48.   
  49. }
  50.  
  51.  
  52.  
  53. When inserting this piece of code [
  54.  
  55. ostream& operator<<(ostream& o, hubo<double,int>& h)
  56. {
  57.   return o << "Hubo[" << h.avar << ',' << h.bvar << "]\n";
  58. }
  59.  
  60. ] instead of something else, gcc-2.1 complains about a missing type conversion
  61. for the ostream& operator<< :
  62.  
  63. TTest.cc: In function `int  main ()':
  64. TTest.cc:40: type conversion required for type `hubo<double ,int>'
  65.  
  66. ...and what makes things even more strange: when looking at the assembly output
  67. gcc does generate the correct name for operator<< (its the same when defining it
  68. inside the class declaration)
  69.  
  70. What's wrong?
  71.  
  72. Chris
  73.