Играя с MSVC ++ 2005, я заметил, что, если один и тот же класс определяется несколько раз, программа все равно с удовольствием связывается, даже на самом высоком уровне предупреждения. Я нахожу это удивительным, почему это не ошибка?
module_a.cpp:
#include <iostream>
struct Foo {
const char * Bar() { return "MODULE_A"; }
};
void TestA() { std::cout << "TestA: " << Foo().Bar() << std::endl; }
module_b.cpp:
#include <iostream>
struct Foo {
const char * Bar() { return "MODULE_B"; }
};
void TestB() { std::cout << "TestB: " << Foo().Bar() << std::endl; }
main.cpp:
void TestA();
void TestB();
int main() {
TestA();
TestB();
}
И вывод:
TestA: MODULE_A
TestB: MODULE_A