C/C++における多重定義エラー

構造体の場合は、同じファイルで同じ構造体を二度定義すると多重定義(multiple definition)エラーになりますが、異なるファイルで同じ構造体を定義しても多重定義エラーにはなりません。
一方、グローバル変数や関数の場合は、異なるファイルで同じ定義をすると多重定義エラーになります。

main.cpp

struct A {
  int i;
};
/*
struct A {
  int i;
};
*/

extern int i;
extern int i;

void f();
void f();

void g();

int main() {
  A a;
/* C
  struct A a;
*/
  a.i = 0;
  f();
  return 0;
}

sub1.cpp

struct A {
  double x;
};

int i;

void f() {}

sub2.cpp

struct A {
  double x;
};

//int i;

//void f() {}


参考サイト

1.C++ ファイルを分けよう
2.C++ ファイル分割と重複定義
3.When can I use a forward declaration?
4.What is the difference between a definition and a declaration?

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中