1. ホーム
  2. c++

[解決済み] c++の多重定義エラーとその解決方法

2022-02-19 01:18:07

質問

私はC++の初心者です。C++の多重定義エラーについて疑問があります。

例えば、あるプログラムに3つのファイルがあるとします。ヘッダーファイルが1つ、.cppファイルが2つです。私は両方の.cppファイルにヘッダーファイルを含めました。

  1. ヘッダーファイルでクラスを宣言し、それぞれの.cppファイルで全く同じようにクラスを定義しています。では、このような実装では多重定義エラーになるのでしょうか?もしそうなら、クラス定義のコピーが2つあり、2つの.oファイルのリンク時にコンパイラがどちらを取るべきか分からないからでしょうか?

この問題を解決するには extern

  1. class XYZ { ... };

  2. ヘッダーファイルでクラスを宣言し、それぞれの.cppファイルでそのクラスを定義していますが、定義(関数本体)が異なっています。このような実装の場合、多重定義エラーになるのでしょうか?もしそうなら、.cppファイルで関数本体が異なる場合、どのように解決すればよいのでしょうか?

解決方法は?

1) 1つのcppファイルに「クラスを定義」することで解決していますね。なぜ、2つのファイルで定義する必要があるのでしょうか?

2) ヘッダーファイルでは定義せず、宣言だけにする。インライン関数など例外もあります。また、クラス自体も複数回定義することができます(この意味は、クラスのメソッドとデータメンバを宣言することです。 {コード しかし、それぞれの定義は同一でなければなりません。これを実現する最も簡単な方法は、ヘッダーファイルの中で一度だけクラスを定義することです。そうすれば、そのヘッダファイルを複数の場所でインクルードした結果の各定義は、必然的に同一になります。

3) これはさらに愚かなことです。何かを2回定義することは1つのことですが、2回定義して毎回異なるというのはさらに意味がありません。

問題は、なぜ物事を複数回定義することが必要な場合があると考えるかだと思います。それはやめましょう。

また、「クラスを定義する」というのはどういう意味なのか、はっきりさせたほうがいいでしょう。私は、クラスのメソッドと静的メンバを定義することだと考えています。しかし、もしあなたが他のことを念頭に置いているのなら、それは混乱の元かもしれません。このような用語の混乱を避けるには、いつものように、コードを投稿するのが一番です。