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

  1. Newsgroups: gnu.g++.help
  2. Path: sparky!uunet!cs.utexas.edu!wupost!gumby!yale!mintaka.lcs.mit.edu!CATFISH.LCS.MIT.EDU!hacrat
  3. From: hacrat@CATFISH.LCS.MIT.EDU (Nate Osgood)
  4. Subject: Mutually recursive class references
  5. Message-ID: <1992Jul27.194051.21598@mintaka.lcs.mit.edu>
  6. Sender: news@mintaka.lcs.mit.edu
  7. Organization: MIT Laboratory for Computer Science
  8. Date: Mon, 27 Jul 1992 19:40:51 GMT
  9. Lines: 62
  10.  
  11.  
  12. I'm hoping to switch from g++ version 1.40 to gcc 2.2.2 as my primary
  13. development platform.  Unfortunately, it seems that gcc 2.2.2 has a difficulty
  14. with some of the code I've been compiling with 1.40.  I'm hoping that perhaps
  15. someone on this newsgroup might be able to suggest a  simple solution to the
  16. incompatibility.
  17.  
  18. The problem occurs when a method of a given class has a prototype that refers
  19. to a class that has not yet been declared, but the method is used AFTER that
  20. other class is declared.  As the GNU info documentation for gcc 2.2.2 notes,
  21. for an arbitrary function the function prototype can be moved so that it also
  22. occurs AFTER the structure (or class) definition, rather than before it.  But
  23. if the function is a METHOD, one wants to put the declaration immediately
  24. inside the class definition.  In this case, the code indicates mthe problem
  25. more clearly than prose:
  26.  
  27. class first
  28. {
  29.  public:
  30.   foo(class second);  /*  Reference to class that does not yet exist.
  31.             Note that the declaration of class first cannot
  32.             FOLLOW that of class second, since class second
  33.             contains an OBJECT of type first
  34.             */
  35. };
  36.  
  37. class second
  38. {
  39.   first f;        /*  Here is the reference to class first -- the need 
  40.             for this reference forces class second to textually 
  41.             follow class first in the program */
  42.  
  43.  public:
  44.   
  45.   bar(class second s) { return(f.foo(s)); }
  46.             /*  Since class second has now been defined, gcc 2.2.2
  47.             thinks that we are calling method foo of class first
  48.             with a different type than it is expecting as a method
  49.             argument.  It gives the complaint:
  50.  
  51.  
  52.              bad argument 0 for function `first::foo 
  53.             (class first::second)' (type was class second)
  54.  
  55.             */
  56. };
  57.  
  58.  
  59.  
  60.     Would anyone happen to know if there an obvious workaround to this
  61. problem that would not require removing the method from the class first
  62. definition or converting the parameter to a "class second *"?
  63.     
  64.     Any help greatly appreciated!
  65.  
  66.     Nate Osgood
  67.  
  68. -- 
  69. -------------------------------------------------------------------------------
  70. Nate Osgood            | ARPA: hacrat@catfish.lcs.mit.edu
  71. CS Graduate Student        | 
  72. MIT LCS Room NE43-636        | UUCP: ...!uunet!catfish.lcs.mit.edu!hacrat
  73.