|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
|||
|
|||
|
Multiple Definitions
I've created a new file, where I keep all of this years code. When I compile my project I get an error saying symbol 'ReleasingBall' has multiple definitions.
Here's how my files are organized: custom_routines.h Code:
#ifndef _CUSTOM_ROUTINES_H_ #define _CUSTOM_ROUTINES_H_ //... bool ReleasingBall; //... #endif Code:
#include <timer.h> #include "custom_routines.h" // function definitions Code:
//.. #include "custom_routines.h" // all of my custom code is commented out, so beside the above include directive, everything is in its original state |
|
#2
|
||||
|
||||
|
Re: Multiple Definitions
I'd think that variable would need to be declared global and then marked extern in all other files that use it. Or something like that, I forget the exact procedure.
|
|
#3
|
|||||
|
|||||
|
Re: Multiple Definitions
When you copy a project to a new folder, you should Clean (or Build all) to get rid of any leftover pointers to the old files. Until you do that, the linker appears to get confused, complaining about what looks like duplicate copies of the object files.
[Edit ![]() Oh! You're not supposed to declare variables in .h files. The bool ReleasingBall; line belongs in custom_routines.c instead, and what goes in custom_routines.h should be extern bool ReleasingBall; (though I'm not sure where bool is defined). Last edited by Alan Anderson : 08-02-2008 at 16:59. Reason: read the problem more closely |
|
#4
|
|||
|
|||
|
Re: Multiple Definitions
Quote:
I defined bool my self with a few typedefs and defines ![]() |
|
#5
|
||||
|
||||
|
Re: Multiple Definitions
You want the compiler to encounter only one declaration for the variable as it processes the set of source source files. Your technique above is designed to prevent multiple references or forward references to be encountered , not multiple variables. I'm sure your custom_routines.h file is processed when you compile multiple separate source files.
So do his, change the statement in custom_routines.h to an external reference and declare storage for the variable in ONLY one source file. In custom_routines.h, do this: #ifndef _CUSTOM_ROUTINES_H_ #define _CUSTOM_ROUTINES_H_ ... extern bool ReleasingBall; ... #endif In custom_routines.c, do this: .... #include <timer.h> #include "custom_routines.h" bool ReleasingBall; // defined only here! // function definitions ... One last thing, it is generally considered bad style to define storage in a header file for exactly the reason you have encountered. HTH |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Short definitions of overdrive | HedlessChkn | General Forum | 3 | 13-01-2008 21:52 |
| Hosting multiple sites in multiple VMs | EHaskins | Website Design/Showcase | 6 | 22-12-2007 01:09 |
| Error - symbol 'command_list' has multiple definitions. | Moloch | Programming | 2 | 17-02-2005 17:32 |
| Error - symbol 'e' has multiple definitions. HELLPPPPP | BookerT | Programming | 2 | 24-01-2005 21:50 |