multiple definition

S

Samuele Armondi

Jochen Zeischka said:
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
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
 
J

Jochen Zeischka

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
 
J

Josephine Schafer

Jochen Zeischka said:
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

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) .
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top