我正在尝试学习如何使用来自
http://qt-project.org/wiki/Dpointer#7969fa90723037d326b77fb11381044e的 qt 示例从低音类继承 d 指针
我已经从网站上逐字复制了它,只做了一点修改,所以代码看起来像这样:
小部件.h
#ifndef WIDGET_H
#define WIDGET_H
// FWD
class WidgetPrivate;
// END
class Widget {
public:
Widget();
protected:
// only sublasses may access the below
Widget(WidgetPrivate &d); // allow subclasses to initialize with their own concrete Private
WidgetPrivate *d_ptr;
};
#endif /* WIDGET_H */
小部件_p.h
#ifndef WIDGET_P_H
#define WIDGET_P_H
#include <string>
#include "widget.h"
// FWD
class Widget;
// End
typedef int Rect;
typedef std::string String;
struct WidgetPrivate
{
WidgetPrivate(Widget *q) : q_ptr(q) { } // constructor that initializes the q-ptr
Widget *q_ptr; // q-ptr that points to the API class
Rect geometry;
String stylesheet;
};
#endif /* WIDGET_P_H */
小部件.cpp
#include "widget.h"
Widget::Widget()
: d_ptr(new WidgetPrivate(this)) {
}
Widget::Widget(WidgetPrivate &d)
: d_ptr(&d) {
}
标签.h
#ifndef LABEL_H
#define LABEL_H
#include "widget.h"
//FWD
class LabelPrivate;
//END
class Label : public Widget {
public:
Label();
protected:
Label(LabelPrivate &d); // allow Label subclasses to pass on their Private
// notice how Label does not have a d_ptr! It just uses Widget's d_ptr.
};
#endif /* LABEL_H */
标签.cpp
#include "label.h"
#include "widget.h"
#include "widget_p.h"
struct LabelPrivate : public WidgetPrivate
{
String text;
};
Label::Label()
: Widget(*new LabelPrivate) // initialize the d-pointer with our own Private
{
}
Label::Label(LabelPrivate &d)
: Widget(d) {
}
当我在 g++ 中编译它时,它给出了这个错误
label.cpp:5:11: error: no matching function for call to ‘WidgetPrivate::WidgetPrivate()’
我已经在clang中尝试过这个,我或多或少地得到了相同的错误,所以问题必须在代码中,但我不知道在哪里。