(sdk)类包含模板的前向声明

Forward declaration of (sdk) class containing template

本文关键字:声明 包含模 sdk      更新时间:2023-10-16

我一直在头文件中做前向声明,并在cpp中包含实际的类文件。但是当类被模板化时,我遇到了问题:

class MyClass {
public:
  MyClass();
  void aFunction();
private:
  QList<int> m_member;
};

为了让它构建,我需要给这个类关于QList的信息。我试着:

class QList;
error: template argument required for 'class QList'

我尝试了(因为我只需要在这个特定的类中整数的QList):

class QList<int>;
error: specialization of 'QList<int>' after instantiation

我已经查找了这些错误,但只发现人们在创建类模板时遇到问题,没有发现任何关于前向声明的问题。

如果没有其他工作,我可以在头文件中#include <QList>并放弃前向声明-但我想了解这个问题。

这个选项在关于模板类前向声明的最常见的问题中也有建议:

只要#include <list>,别担心。

你可以向前声明一个模板化的类,像这样:

template<typename>
class QList;

但是如果你用这个类型声明一个成员(即m_member),它不是一个引用或指针,它将不起作用