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
インラインではありません。それが正しいとすれば出力は正しいだろう。コンパイラはおそらく、1つの(ランダムに選択された)シンボルを破棄しています。ニールが指摘したように、もし彼らが両方とも同じであれば、それは完全に大丈夫でしょう。 –