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

Forward declaration of (sdk) class containing template

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

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

为了构建它,我需要提供 class 关于 QList 的信息。我试过了:

class QList;

error: template argument required for 'class QList'

我试过了(因为在这个 class 中我只需要 QList 个整数):

class QList<int>;

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

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

如果没有别的办法,我可以 #include <QList> 在头文件中放弃前向声明 - 但我想了解这个问题。

关于 template classes forward declarations 的最热门问题中也建议使用此选项:

Just #include <list> and don't worry about it.

我不明白other answers...

你可以转发声明一个模板化的 class,像这样:

template<typename>
class QList;

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