Connecting Tech Pros Worldwide Forums | Help | Site Map

multiple definition

Jochen Zeischka
Guest
 
Posts: n/a
#1: Jul 19 '05
Hi everybody!

I have a question concerning code organisation. Suppose I have the following
header file:

#ifndef SOME_NAME
#define SOME_NAME

namespace N {
void F()

... here comes the implementation
}
}

#endif

In this case I would think that you never ever can encounter a 'multiple
definition' problem because
1) SOME_NAME is defined the first time F is defined
2) there is only one definition of F, so it even wouldn't be a problem to
define the same F a hundred times...

Still, I get the error message that F is multiply defined when this header
file is used in other header files. (And there is definitely not another 'F'
defined in any of these header files)

Can anyone help me out?

Thanks!

Jochen



Josephine Schafer
Guest
 
Posts: n/a
#2: Jul 19 '05

re: multiple definition



"Jochen Zeischka" <jochen.zeischka@rug.ac.be> wrote in message
news:bdrv8k$nki$1@gaudi2.UGent.be...[color=blue]
> Hi everybody!
>
> I have a question concerning code organisation. Suppose I have the[/color]
following[color=blue]
> header file:
>
> #ifndef SOME_NAME
> #define SOME_NAME
>
> namespace N {
> void F()
>
> ... here comes the implementation
> }
> }
>
> #endif
>
> In this case I would think that you never ever can encounter a 'multiple
> definition' problem because
> 1) SOME_NAME is defined the first time F is defined
> 2) there is only one definition of F, so it even wouldn't be a problem[/color]
to[color=blue]
> define the same F a hundred times...
>
> Still, I get the error message that F is multiply defined when this header
> file is used in other header files. (And there is definitely not another[/color]
'F'[color=blue]
> defined in any of these header files)
>
> Can anyone help me out?
>
> Thanks!
>
> Jochen[/color]

Please note that the header guards protect multiple inclusion of a header
file in
a single translation unit(e.g.cpp file). If you happen to include this
header file in several
translation units then the linker problem will arise. Either move the
definition to some implementation file or
else make the function inline(only if it suits in your case) .





Samuele Armondi
Guest
 
Posts: n/a
#3: Jul 19 '05

re: multiple definition



"Jochen Zeischka" <jochen.zeischka@rug.ac.be> wrote in message
news:bdrv8k$nki$1@gaudi2.UGent.be...[color=blue]
> Hi everybody!
>
> I have a question concerning code organisation. Suppose I have the[/color]
following[color=blue]
> header file:
>
> #ifndef SOME_NAME
> #define SOME_NAME
>
> namespace N {
> void F()
>
> ... here comes the implementation
> }
> }
>
> #endif
>
> In this case I would think that you never ever can encounter a 'multiple
> definition' problem because
> 1) SOME_NAME is defined the first time F is defined
> 2) there is only one definition of F, so it even wouldn't be a problem[/color]
to[color=blue]
> define the same F a hundred times...
>
> Still, I get the error message that F is multiply defined when this header
> file is used in other header files. (And there is definitely not another[/color]
'F'[color=blue]
> defined in any of these header files)
>
> Can anyone help me out?
>
> Thanks!
>
> Jochen
>
>[/color]
I had the same problem. I solved it by splitting the code into two: the
declarations in a .h file and _all_ the implementations in a .cpp file, i.e.
// foo.h
#ifndef foo_h
#define foo_h

namespace n
{
class bar
{
private:
int i;
public:
bar(int);
void f();
};
}
#endif

//foo.cpp
n::bar::bar(int n) : i(n)
{
}

void n::bar::f()
{
//whatever
}

HTH,
S. Armondi



Closed Thread