1

试图向 QString 添加功能但得到构建错误?如果我错过了什么?

#ifndef CSTRING_H
#define CSTRING_H

#include <QString>
#include <QStringList>
#include <QObject>


class CString : public QString, public QObject
{
    Q_OBJECT
public:
    explicit CString(QObject *parent = 0);
    QStringList Find(QString qstrSearch);//all occurances

signals:

public slots:

};

#endif // CSTRING_H

#include "cstring.h"

CString::CString(QObject *parent) :
    QString(parent)     //ERROR IS POINTING TO HERE
{
}


QStringList Find(QString qstrSearch)//all occurances
{//indexOf, contains
    QStringList qstrList;



    return qstrList;
}

构建错误

4

3 回答 3

2

QString(parent)Qstring 没有以 QObject-parent 作为参数的构造函数。因此,编译器会尝试将您的 QObject 转换为最接近的 Matching 构造函数,这可能是QString ( QChar ch )

于 2013-08-06T05:03:27.780 回答
2

您应该在这里使用组合而不是继承,因为QString它不是为子类化而设计的。如果你将它子类化,你会遇到很多麻烦。
做这样的事情:

class CString : public QObject //if you're really need this class to be QObject, that's not always a good idea
{
    Q_OBJECT
public:
    explicit CString(QObject *parent = 0) : 
        QObject(parent), 
        mString() //QString have no constructors with parameter QObject*...
    {
    }

private:
    QString mString;
}

当然,实现应该在cpp文件中,这只是一个简短的例子

于 2013-08-06T07:08:15.620 回答
2

不要派生类形式QString,因为它在设计时没有考虑到多态性(请注意,它没有虚拟方法,特别是没有虚拟析构函数)如果你想提供新的实用函数,只需使用自由函数 - 你可能想要它们在命名空间中:

namespace CString {
    QStringList find(const QString &search);
}
于 2013-08-06T08:21:47.230 回答