C++ Multiple defintions error
I don't wish to create a wall of code so if you need any code just ask and i will post. I am getting multiple definition errors and i have no idea why.开发者_开发知识库 i believe the error is occurring because i am attempting to declare a variable in one header file(as well as create an object for it in the same header) and then use it among 4 different files.and for each file i use the header in i get multiple definition, with the small amount of info i have given you any ideas as to why this is occurring?
please ask if more information is required to solve the question.I am using Code::Blocks ide mingW compiler and programming on Windows 7
EDIT
Thanks you all for your extremely fast help you have solved my problem :DDon't declare it in a header file (although technically, I mean don't define it there).
In your header file you should have:
extern int variableIWantOneCopyOfOnly;
and then, in a single C source file that you will link in, put:
int variableIWantOneCopyOfOnly;
The former will let all your source files know about the existence of the variable but without allocating space for it. The single translation unit containing the second line will allocate the space for it and the linker will fix up all the references to it.
Include guards won't help with multiple definitions since they only stop the inclusion within a single translation unit.
By that I mean, if you have the following files:
xyz.h: xyz1.c: xyz2.c:
#ifnef XYZ #include "xyz.h" #include "xyz.h"
#define XYZ
int a;
#endif
and you execute a command like:
gcc xyz1.c xyz2.c
then they will both get the own copy of a
, not share a copy, because the scope of the include guard is the translation unit, not the executable created by the linker.
Have you used include guards in your header? Generally, you want to structure your headers something like this:
#ifndef _HEADER_FILE_H
#define _HEADER_FILE_H
// actual definitions
#endif
There's also #pragma once
, but that is not standard.
"as well as create an object for it in the same header"
If you define things in your headers, and then try to link objects from multiple translation units including that header, you'll get multiple definition errors.
If the header's called say x.h, create an x.cc (or x.c++, x.cpp or whatever you normally do) that includes the header. Move the definition of the object in there. Compile it and link it with the other objects in your application.
the multiple definition error means you are declaring many times the same variable. Regarding what you are doing, this occurs because you are including 4 times the same file (so you are declaring 4 times your variables.
Add the preprocessor
#ifndef _HEADERFILE_H
#define _HEADERFILE_H
// Your declarations
#endif
or if you are using Visual studio just add this on the first line of the file:
#pragma once
You should move the actual definition into a c++ (.cc .cpp whatever) file and only leave the declaration within the header. Also you will need to prefix the declaration with 'extern'.
精彩评论