我正在尝试在 Qt 中编写一个库,它包含三个 C++ 类。clsA
每个应用程序应该是单个实例(这就是我有Instance
功能的原因)。clsA
实例化数量clsB
取决于不同的状态,它应该保留指针以便稍后与它们交互。clsC
是一个接口,应该由开发人员稍后实现并实例化,并且它们的指针应该传递给clsA::init
函数。因此,如果开发人员想要使用该库,他/她应该编写如下内容:
QList<clsC*> l;
clsC1* one = new clsC1();
l.append(one);
clsC2* two = new clsC2();
l.append(two);
//and so on
clsA* a = clsA::Instance();
a->init(l);
这个类clsA
看起来像这样:
#include "clsB.h"
#include "clsC.h"
namespace MRZ{
namespace Core{
class clsA :public QObject
{
Q_OBJECT
public:
static clsA* Instance()
{ if(instance == NULL) return new clsAlertManager(); }
//stores the pointers in a Qmap
void init(QList<clsC*> _listOfPointers); //line number 37
protected:
static inline clsC* getclsCPointer(QString _key) //line number 42
{ return clsCPointers.value(_key);}
private:
static clsAlertManager* instance;
clsAlertManager(){instance = this;}
// depend on some variables this method instantiates clsB and store
// the pointers in another QMAP called clsBPointers with some int ID
void initclsB();
QMap<int, clsB*> clsBPointers;
QMap<QString, clsC*> clsCPointers;
};
}
}
clsB
除了我在其中声明了一个这样的结构外,类头没有什么特别之处:
namespace MRZ{
namespace Core{
struct myStruct { int Value; };
class clsB: public QObject
{
Q_OBJECT
//calss definition
};
}
}
Q_DECLARE_METATYPE(MRZ::Core::myStruct)
并且还具有以下clsB
功能之一:
bool clsB::someFun(Qstring _key)
{
clsC* c = clsA::getclsCPointer(_key);
return c->someOtherFun(myInstantiatedStruct);
}
clsC
哪个是应用程序稍后应该开发的接口,如下所示:
namespace MRZ{
namespace Core{
class clsC
{
public:
clsC();
bool someOtherFun(struct myStruct _struct);//line number 39
{ return this->isTure(_struct.Value);}
protected:
virtual bool isTrue(int _value) = 0;
//some virtual function that should be developed later
};
}
}
但是当我尝试构建项目时,我收到很多错误指示:
clsC.h:39: error: '_struct' has incomplete type
clsC.h:39: error: forward declaration of 'MRZ::Core::myStruct'
clsA.h:37: error: 'clsC' was not declared in this scope
clsA.h:37: error: template argument 1 is invalid
clsA.h:42: error: 'clsC' does not name a type
我已经很好地包含了头文件,这是生成错误的代码部分的“简化版本”的一部分。而且我一直在搜索互联网并阅读了一些我可能需要编写一个包装函数来为我事先实例化指针的地方,但我并没有真正理解这个概念。任何评论或帮助将不胜感激。