同じメイン (main.cpp) ファイルを使用する一連のプログラムを作成しようとしていますが、別のセカンダリ ソース ファイル (object1.cpp、object2.cpp など) を使用しています。したがって、基本的に次のようにコンパイルします。
g++ -o program1.exe main.cpp object1.cpp
g++ -o program2.exe main.cpp object2.cpp
私がやりたいことは、objectN.cpp に、メイン ファイルから呼び出される特定のメソッドが実装されたクラスを定義させることです。ソースコードは次のようになります。
ヘッダー ファイル (object.hpp)
#ifndef INCLUDE_OBJECT_HPP
#define INCLUDE_OBJECT_HPP
class MyObjectInterface
{
public:
MyObjectInterface();
virtual ~MyObjectInterface() {};
virtual void MethodA() = 0;
virtual void MethodB() = 0;
};
#endif
object1.cpp
#include <iostream>
#include "object.hpp"
using namespace std;
class MyObject : public MyObjectInterface
{
private:
int member;
public:
MyObject(int a) { member = a; }
void MethodA() { cout << member << endl; }
void MethodB() { cout << member*2 << endl; }
};
main.cpp
#include <iostream>
#include "object.hpp"
using namespace std;
MyObjectInterface *x;
int main()
{
x = new MyObject(1);
x->MethodA();
x->MethodB();
return 0;
}
object2.cpp は object1.cpp と同様の構造体を持ちますが、クラスは異なるデータ メンバーを持ちます。
main.cpp に MyObject のクラス宣言を含める必要があるため、これを機能させることができません。しかし、各 object*.cpp ファイルは、異なるメンバーを持つ MyObject クラスを宣言するため、オブジェクトごとに異なるヘッダーが必要なため、単純に別の object.hpp ヘッダーを作成してメインに含めることはできません。main が知っておくべき唯一のことはメソッドです。
問題を明確に説明できたことを願っています。コメントを残していない場合は、明確にしようとします。このようなことを行うための本当に簡単な方法があるはずですが、私はそれを理解できません。
ありがとう