インターフェイス A の使用に問題があります。
ベクトル aVec VisualStudio に格納されている任意のポインターで Initialize() 関数を呼び出そうとすると、「エラー: クラスタイプの不完全へのポインターが無効です」と表示されます。
特定の実装タイプにキャストせずに、基本的なポインターでインターフェイス関数を呼び出すことができるように、このインターフェイスを実装する方法を知っている人はいますか?
エラーは main.cpp で発生します。ソース全体を以下に添付しました。
A.hpp:
#ifndef _A_HPP_
#define _A_HPP_
class A {
private:
int number;
public:
A();
virtual ~A();
virtual bool Initialize();
int GetNumber();
void SetNumber(int number);
};
#endif /* _A_HPP_ */
A.cpp:
#include "A.hpp"
A::A() {
}
A::~A() {
}
bool A::Initialize() {
return true;
}
int A::GetNumber() {
return this->number;
}
void A::SetNumber(int number) {
this->number = number;
}
B.hpp:
#ifndef _B_HPP_
#define _B_HPP_
class B : public A{
private:
char* abc;
public:
B();
~B();
bool Initialize();
};
#endif /* _B_HPP_ */
B.cpp:
#include "B.hpp"
B::B(){
}
B::~B(){
delete[] abc;
}
bool B::Initialize(){
this->abc = new char[10];
}
AFactory.hpp
#ifndef _AFACTORY_HPP_
#define _AFACTORY_HPP_
class A;
class AFactory {
public:
static A* GetInstance(int index);
};
#endif /* _AFACTORY_HPP_ */
AFactory.cpp
#include "AFactory.hpp"
#include "A.hpp"
#include "B.hpp"
A* AFactory::GetInstance(int index) {
A* a;
if(index == 0)a = new B();
else a = 0;
return a;
}
main.cpp
#include "A.hpp"
#include "B.hpp"
#include "AFactory.hpp"
#include <vector>
using namespace std;
int main() {
vector<A*> aVec;
aVec.push_back(AFactory::GetInstance(0));
aVec.push_back(AFactory::GetInstance(0));
aVec.push_back(AFactory::GetInstance(0));
for(int i = 0; i < 3; i++) aVec[i]->Initialize();
}
どうもありがとうございました!異種発生