以下のように、同じ名前を宣言する 2 つのファイルがありますclass C
。
// C1.cpp
class C {
public: void foo (int, float);
};
int main () {
C c;
c.foo(1, 2.3);
}
void C::foo (int, float) {}
// C2.cpp
class C {
public:
int i; // <--- extra variable
void foo (int, float); // <--- non static
};
void foo () {
C c;
c.foo(0, 0.0);
c.i = 0;
}
g++ C1.cpp C2.cpp
!で正常にコンパイルされます。
- 名前だけが同じ で本体が同じではない場合、コンパイラ/リンカー エラーが発生しないのはなぜですか?
- と非静的バージョン
C::foo(..)
の両方で、 なぜ serve の定義が 1 つなのですか?static
- または、これがコンパイラの別の未定義の動作ケースである場合、それを防ぐことはできますか?