2つの異なるヘッダーファイルを作成しました。それぞれに同じ名前のクラスが含まれており、それぞれが異なるcppファイルに含まれているため、コンパイラーはそれらの再定義について文句を言いません。
これらは2つの異なるクラスのように動作しますが、同じメソッド、同じ名前、同じ引数がある場合を除き、次のように1つだけが呼び出されます。
//on first cpp:
#include "same1.h"
//...
SameName obj(int_value);
obj.ok(int_value);
obj.not_ok();
//on second cpp
#include "same2.h"
//...
SameName obj(float_value);
obj.ok(float_value);
obj.not_ok();
両方のファイルで、same1.hからnot_okが呼び出されますが、もちろん正しく初期化されていません
私は問題が何であるか、そしてなぜこれが起こるのかを知っています。私は名前マングリングにも精通しており、コンパイル時に両方がまったく同じ名前を持っていることを知っています。
それがC++の標準的な動作なのか、それとも私のコンパイラがどのように実装したのか、つまり、すべてのコンパイラがこの状況で同じことを行うべきかどうかを知りたいだけです。
私はDebianLinuxでgcc4.7.1を使用していることに言及する必要があります。