我在使用接口 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];
}
工厂.hpp
#ifndef _AFACTORY_HPP_
#define _AFACTORY_HPP_
class A;
class AFactory {
public:
static A* GetInstance(int index);
};
#endif /* _AFACTORY_HPP_ */
工厂.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;
}
主文件
#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();
}
非常感谢你!异种