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 を最も近い一致するコンストラクターにキャストしようとします。QString ( QChar ch )

于 2013-08-06T05:03:27.780 に答える
2

ポリモーフィを念頭に置いて設計されていないため、クラス形式を派生させないでくださいQString(仮想メソッド、特に仮想デストラクタがないことに注意してください) 新しいユーティリティ関数を提供したい場合は、無料の関数を使用してください。名前空間でそれらを:

namespace CString {
    QStringList find(const QString &search);
}
于 2013-08-06T08:21:47.230 に答える
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 に答える