home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / lang / c / 16372 < prev    next >
Encoding:
Text File  |  1992-11-11  |  2.7 KB  |  69 lines

  1. Path: sparky!uunet!utcsri!torn!thunder!bkssmith
  2. From: bkssmith@thunder.LakeheadU.Ca (BKS Smith)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Please help me with my #include mess-up.
  5. Message-ID: <519@thunder.LakeheadU.Ca>
  6. Date: 12 Nov 1992 05:39:25 GMT
  7. References: <1992Nov11.172840.5540@news.ysu.edu>
  8. Organization: Lakehead University, Thunder Bay, Ont., Canada
  9. Lines: 58
  10.  
  11. In article <1992Nov11.172840.5540@news.ysu.edu> ae007@yfn.ysu.edu (Daniel Newcombe) writes:
  12. >
  13. >Well here is my problem:  I have these modules:
  14. >  MOSTYPES.H - defines several types I am using in this
  15. >    project, such as boolean, and a few structs and typedefs
  16. >QUEUE.H - the header file for my queue class which has a few
  17. >   inline things in it.
  18. >   This has to include mostypes.h because it needs boolean.
  19. >QUEUE.CPP - the rest of the code for the queues.  It includes
  20. >  queue.h
  21. >MAINMOD.CPP - my main module.  It includes QUEUE.H and MOSTYPES.H.
  22. >When I compile I get a whole mess of errors saying that all sorts
  23. >of things in MOSTYPES.H are redefined.  There are a lot more        
  24. >modules that are going to have to use mostypes.h before it's   
  25. >all over with.
  26. >
  27. >My question - how do I get this to compile, while still keeping
  28. >the code portable and re-usable???
  29. >
  30.  
  31. The problem is that you are actually #including MOSTYPES.H _twice_.
  32. MAINMOD.CPP #includes QUEUE.H which #includes MOSTYPES.H, then it tries to
  33. #include MOSTYPES.H again. A C++ compiler will choke on this.
  34. The solution is pretty simple. Change MOSTYPES.H to this:
  35.  
  36. // MOSTYPES.H
  37.  
  38. #ifndef MOSTYPES_INCLUDED      // use whatever name you want here
  39. #define MOSTYPES_INCLUDED   1  // as long as it matches this one
  40. .
  41. .
  42. .
  43. [put your original code for MOSTYPES.H here]
  44. .
  45. .
  46. .
  47. #endif
  48. // end of MOSTYPES.H
  49.  
  50. Now when you try to include it the second time, the #ifndef statement is
  51. false, so the body of your original code is not #included.
  52. BTW, to be truly portable, _every_ header file you create should have this
  53. safeguard.
  54.  
  55.                         BKS
  56.  
  57. PS. this really should have been posted to comp.lang.c++...
  58.  
  59.  
  60. -----------------------------------------------------------------------------
  61. |Scotty:Captain, we din' can reference it!             |                    |
  62. |Kirk:  Analysis, Mr. Spock?                           |                    |
  63. |Spock: Captain, it doesn't appear in the symbol table.|bkssmith@           |
  64. |Kirk:  Then it's of external origin?                  |thunder.LakeheadU.Ca|
  65. |Spock: Affirmative.                                   |                    |
  66. |Kirk:  Mr. Sulu, go to pass two.                      |                    |
  67. |Sulu:  Aye aye, sir, going to pass two.               |                    |
  68. -----------------------------------------------------------------------------
  69.