我有使用接口A.C++调用接口方法原因指针到不完全在VS2012
虽然试图调用存储在所述载体的任何指针初始化()函数AVEC VisualStudio的说“错误的问题:指向不完整的类型指针无效“。
有没有人知道如何实现这个接口的方式,允许我调用基本指针的接口函数,而不是将其转换为特定的实现类型?
错误发生在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();
}
非常感谢您! Xenogenesis
请注意,您的保护名称是保留的,所以您有未定义的行为。您不能使用以下划线开头且后跟大写字母的名称。 – 2013-04-09 18:23:13
我不知道。 谢谢,我将来会考虑。 – Xenogenesis 2013-04-09 18:27:35
它甚至可以解决你的问题,所以我现在就做。如果没有,请发布完整的错误。 – 2013-04-09 18:28:30