【Cpp】「redefinition of 'xxx'」エラーの原因の対策方法

目次

エラーの原因

読み込んでいるヘッダーファイルが重複しているから、1つだけ読み込むようにしてねというエラーです。
C++では同一のヘッダーファイルを読み込むことができません。C++のコンパイルの仕組み上、単純にファイルを展開しているので同一の内容があるとコンパイル時に同一の関数や変数が見つかり予期しない動作になる可能性があったり、ヘッダーファイル同士の相互インクルードによる無限ループが起こっていしまうので、エラーになります。

そのため、コンパイルが始まる前にヘッダーの重複インクルードチェックが行われ、そのときに発生するエラーになります。

対策方法

ヘッダー部分に#pragma onceと記述することでヘッダーファイルを1度だけインクルードすることを強制することができます。

1
2
#pragma once
// 処理

昔の方法

私が昔C++を学んでいたときは、以下の書き方でインクルードガードを行っていました。

この方法の欠点として、defineが他のファイルで衝突してしまう可能性がありました。(まあ、ファイル名をdefineにすれば問題はないと思うのですが)

どちらにせよ、効果としては#pragma onceと同じなので、1行でシンプルに記述できる#pragma onceを使っておけばいいかと思います。

1
2
3
4
5
6
#ifndef TEST
#define TEST

// 処理

#endif /* !TEST */

【Cpp】「redefinition of 'xxx'」エラーの原因の対策方法

https://blog.djima.net/2021/10/01/【Cpp】「redefinition-of-xxx-」エラーの原因の対策方法/

Author

Daiki Iijima

Posted on

2021-10-01

Updated on

2024-04-17

Licensed under