Classes with the same name - is it restricted only within the same translation unit?
        Posted  
        
            by LeopardSkinPillBoxHat
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by LeopardSkinPillBoxHat
        
        
        
        Published on 2010-05-12T05:46:42Z
        Indexed on 
            2010/05/12
            5:54 UTC
        
        
        Read the original article
        Hit count: 320
        
Let's just I had the following code:
foo.h
class Foo
{
    // ...
};
foo.cpp
#include "foo.h"
// Functions for class Foo defined here...
Let's say that Foo are built into a static library foo.lib.
Now let's say I have the following:
foo2.h
class Foo
{
    // ...
};
foo2.cpp
#include "foo2.h"
// Functions for class Foo defined here...
This is built into a separate static library foo2.lib.
Now, if I re-link foo.lib and foo2.lib into an executable program foo.exe, should it be complaining that class Foo has been defined twice?
In my experiences, neither the compiler or the linker are complaining.
I wouldn't be expecting the compiler to complain, because they have been defined in separate translation units.
But why doesn't the linker complain?
How does the linker differentiate between the 2 versions of the Foo class?  Does it work by decorating the symbols?
© Stack Overflow or respective owner