编译器错误C2248:'QObject :: Qobject':无法访问类'QObject'中声明的私有成员

时间:2014-11-18 23:09:30

标签: qt qobject qmetaobject

大家好我有一个foo类

foo.h中的代码

namespace GUI
{
class Foo : public QObject
{
Q_OBJECT

public:
explicit Foo(QObject *parent = 0);
virtual ~Foo();
....


};
}

现在这个工作和编译正常但我想使用QSettings保存这个自定义c ++类,其中一个步骤就是用Q_DECLARE_METATYPE

注册你的类

因此,只要我放上这一行     Q_DECLARE_METATYPE(Foo) 在我的foo.h文件的末尾,我得到了这些编译器错误C2248:' QObject :: Qobject':无法访问类中声明的私有成员' QObject'点击时只带我到我的connection.h头文件的最后一行,并没有提供任何其他可能有什么问题的信息,我的错误指向

  Class Foo
  {

  };<---- point me here
  Q_DECLARE_METATYPE(Foo)

我知道QObject无法复制,这与它有关,但我不知道这里可能有什么问题,我怎么能纠正它。 提前致谢

3 个答案:

答案 0 :(得分:2)

  

我知道QObject无法复制,这与它有关,但我不知道这里可能有什么问题,我怎么能纠正它。

相关。 Q_DECLARE_METATYPE要求您的类型可以复制,但您的类型继承自QObject,因此您无法执行此操作。当然,您可以改为Q_DECLARE_METATYPE(Foo*),但我认为您应该将设置移动到单独的值类中,然后您可以使用QSettings进行保存。

答案 1 :(得分:0)

确保您的Q_DECLARE_METATYPE声明在您的命名空间的,并且您完全符合您的班级名称。有关详细信息,请参阅Q_DECLARE_METATYPE doc。

namespace GUI
{

class Connection : public QObject
{
    ...
};

}

Q_DECLARE_METATYPE(GUI::Connection)

答案 2 :(得分:0)

  

我知道QObject无法复制,这与它有关但是我   我不知道这里可能有什么问题,我怎么能纠正它。

所以声明一个拷贝构造函数,然后就可以了。

...
Foo(const Foo &_other);
...