【问题标题】:How to use a QMap in an interface如何在界面中使用 QMap
【发布时间】:2017-03-13 16:00:57
【问题描述】:

我正在尝试在课堂上使用 QMap,但出现错误:

/* path */.h:18: error: template argument required for ‘class QMap’
 class QMap;
       ^~~~

实现

class QMap;

class MappingInterface
{

public:
    virtual ~MappingInterface() {}

    virtual QMap<QString, QString> itemsMap() const = 0;
};

#define MappingInterface_iid "com.myapp.MappingInterface"

    Q_DECLARE_INTERFACE(MappingInterface, MappingInterface_iid)

如何在类中使用 QMap?

提前谢谢你。

【问题讨论】:

  • 为什么class QMap的前向声明?
  • 错误很清楚:没有class QMap,只有一个classtemplate
  • 如何在课堂之外使用 QMap?你会得到同样的错误
  • 我想在界面中使用它(MappingInterface 如我的问题所示)@tobi303

标签: c++ qt qmap


【解决方案1】:

QMap 是一个模板,您不能只输入class QMap 而不是标题! 短类原型只能用于指针,对象和引用必须包含完整类声明的标头!

您必须包含 QMap 的标头:

#include <QMap>
#include <QString>

class MappingInterface
{
public:
    virtual ~MappingInterface() {}
    virtual QMap<QString, QString> itemsMap() const = 0;
};

#define MappingInterface_iid "com.myapp.MappingInterface"

Q_DECLARE_INTERFACE(MappingInterface, MappingInterface_iid)

【讨论】:

    【解决方案2】:

    Wohlstand 的回答不准确,可以转发声明模板类。 使用 QMap,您可以这样做:

     template <class Key, class T> class QMap;
    

    如果你愿意,当然可以缩进一点

    template <class Key, class T> 
    class QMap;
    

    查看这些答案以了解更多信息

    How to forward declare a C++ template class?

    When can I use a forward declaration?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      相关资源
      最近更新 更多