ここには既に多くの「複数の定義」に関する質問があることを認識していますが、過去 2 時間かけて説明を探しましたが、見つかりませんでした。これが重複している場合は申し訳ありません。
現在、Array.h と Vector.h の 2 つのクラスがあります。どちらもグローバル変数を持たず、どちらも他方に依存していません (つまり、Array は Vector を使用せず、Vector は Array を使用しません)。実装は .h ファイルにあります。
ここに私のMain.cppがあります:
#include <iostream>
#include "Array.h"
#include "Vector.h"
using namespace std;
int main() {
cout << "Done" << endl;
return 0;
}
...そして、すべて正常に動作します。ただし、 #include ステートメントのみで別の .cpp ファイルを作成すると...
DataReader.cpp
#include "Array.h"
#include "Vector.h"
...その後、すべてが爆発し、Vector のすべてのメソッド、コンストラクター、および演算子のオーバーロードに対して大量のエラーが発生します。
DataReader.o: In function `Vector':
C:\C++\Eclipse CDT\workspace\3D_Adaptive_FEM\Debug/..//Vector.h:49: multiple definition of `Vector::Vector()'
TestMain.o:C:\C++\Eclipse CDT\workspace\3D_Adaptive_FEM\Debug/..//Vector.h:49: first defined here
DataReader.o: In function `Vector':
C:\C++\Eclipse CDT\workspace\3D_Adaptive_FEM\Debug/..//Vector.h:53: multiple definition of `Vector::Vector(int const&, int const&, int const&)'
TestMain.o:C:\C++\Eclipse CDT\workspace\3D_Adaptive_FEM\Debug/..//Vector.h:53: first defined here
DataReader.o: In function `Vector':
C:\C++\Eclipse CDT\workspace\3D_Adaptive_FEM\Debug/..//Vector.h:56: multiple definition of `Vector::Vector(double const&, double const&, double const&)'
TestMain.o:C:\C++\Eclipse CDT\workspace\3D_Adaptive_FEM\Debug/..//Vector.h:56: first defined here
DataReader.o: In function `ZNK6Vector1xEv':
C:\C++\Eclipse CDT\workspace\3D_Adaptive_FEM\Debug/..//Vector.h:59: multiple definition of `Vector::x() const'
TestMain.o:C:\C++\Eclipse CDT\workspace\3D_Adaptive_FEM\Debug/..//Vector.h:59: first defined here
etc...
しかし#include "Array.h"
、DataReader.cpp だけを持っていれば、すべて正常に動作します。
#include "Vector.h"
に当てはまらないことの何が間違っている可能性があります#include "Array.h"
か?
編集: 実装を .cpp ファイルに分割するとエラーが修正されますが、配列ではなくベクトルに対してそれを行う必要がある理由が説明されていません。