0

QwtPlotCurve の QList を作成したいと思います。この理由は、後で QwtPlot からそれらを削除できるようにするためです。次のコードがあります。

QList<QwtPlotCurve> myList = new QList<QwtPlotCurve>;
QwtPlotCurve* curve1 = new QwtPlotCurve();
QwtPlotCurve* curve2 = new QwtPlotCurve();
curves->append(curve1);
curves->append(curve2);

コードはコンパイルされず、コンパイラは次のように出力します。

エラー: 'QList ' から非スカラー型 'QList' への変換が要求されました

エラー: 'QList::append(QwtPlotCurve &)' void QList::append(const T&) [with T = QwtPlotCurve]の呼び出しに一致する関数がありません

注: 候補は次のとおりです。

注: void QList::append(const T&) [with T = QwtPlotCurve]

注: 'QwtPlotCurve*' から 'const QwtPlotCurve&' への引数 1 の既知の変換はありません

注: void QList::append(const QList&) [with T = QwtPlotCurve]

注: 'QwtPlotCurve*' から 'const QList&' への引数 1 の既知の変換はありません

...

QwtPlotCurve は一定であるべきだと言っていますが、どう対処すればよいかわかりません。曲線を QList に保存してから (ユーザーの要求に応じて) プロットから削除することが正しいアプローチであるかどうかもわかりません。


sjwarner の回答の後、次のことを試しました。

QList<QwtPlotCurve*> curves;
QwtPlotCurve* curve1 = new QwtPlotCurve();
QwtPlotCurve* curve2 = new QwtPlotCurve();
curves->append(curve1);
curves->append(curve2);

次のエラーが発生しました。

エラー: '->' のベース オペランドに非ポインター型 'QList' があります エラー: '->' のベース オペランドに非ポインター型 'QList' があります

私はこのエラーを次のように理解しました。curve は QList であり、QList へのポインターである必要があります。

私が試してみると:

QList<QwtPlotCurve*>* curves = new QList<QwtPlotCurve*>;
QwtPlotCurve* curve1 = new QwtPlotCurve();
QwtPlotCurve* curve2 = new QwtPlotCurve();
curves->append(curve1);
curves->append(curve2);

それは正常に動作します。「新しい」演算子を取り除くために、sjwarner によって指摘された「暗黙の共有」を見ていきます。

4

1 に答える 1

1

2 つの問題があります。

  1. 上記のカミル・クリムレックがコメントしたようQListに、スタック上でオブジェクトを宣言し、それをヒープに割り当てようとしています -呼び出してnewいるオブジェクトのタイプへのポインタを返すnewので、効果的に次のことをしようとしています:

    QList<T> = *QList<T>
    

    余談ですが、Qtはすべてのコンテナー クラスに対して暗黙的な共有を実装newしているため、 a をオフにする必要があることは非常にまれです。つまり、すべての Qt コンテナー (および以外の多くのクラス) をスタックとして自信を持って宣言できます。含まれているデータが他の場所で必要な場合は、オブジェクトと値渡し - Qt はすべてのメモリ効率とオブジェクトのクリーンアップを処理します。QList

    詳細については、これをお読みください。

  2. オブジェクトの を宣言しQList、オブジェクトへのポインターで埋めようとしています。QListデータのコピーを含めるかどうかを決定する必要があります。

    QList<QwtPlotCurve> curves;
    QwtPlotCurve curve1();
    QwtPlotCurve curve2();
    curves.append(curve1);
    curves.append(curve2);
    

    QwtPlotCurveまたは、 をヒープに割り当てて、それらへのポインタを に格納するかどうかQList:

    QList<QwtPlotCurve*> curves;
    QwtPlotCurve* curve1 = new QwtPlotCurve();
    QwtPlotCurve* curve2 = new QwtPlotCurve();
    curves.append(curve1);
    curves.append(curve2);
    
于 2012-05-10T14:05:51.400 に答える