0
class Cell : public QTableWidgetItem
{
public:
    Cell();

    QTableWidgetItem *clone() const;
...
}

上記は Qt プログラムのクラス定義です。以下は残りの部分です。

QTableWidgetItem *Cell::clone() const
{
    return new Cell(*this);
}

私の質問は、次のように変更した場合の最後の文についてです。

return new Cell(this);

次に、Qt はエラー メッセージを表示します。 ここに画像の説明を入力

なんで?thisそれはポインタであり、引数にはなり得ないことを理解しています。でもタイプ*thisかも&

4

1 に答える 1

5

クラスのコピーコンストラクターを定義していないため、コンパイラーは次のシグネチャを使用してコンストラクターを生成しますCell(const Cell&): を呼び出そうとすると、コンパイラはさまざまなコンストラクターの中から見つけようとしますが、明らかに一致するものはありません。型のオブジェクトへの参照をパラメーターとして (それへのポインターではなく)期待するため、自動生成されたコピー コンストラクターと一致し、ポインターを逆参照して、実際のオブジェクトを参照渡しできるようにします。呼び出し構文が考慮される限り、呼び出しCell(this)Cell(Cell*)CellCell(*this)Cell(const Cell&)Cell*thisCell(*this)参照渡しまたは値渡しとしてコンパイラによって解決できます。あなたの場合、コピーコンストラクターは参照によってパラメーターを受け取るため (&署名の ため)、コンパイラーはCell(*this)参照渡しとして解決します (実際には参照渡しでなければなりませんが、それは別の話です)。この件名の詳細については、こちらをご覧ください:参照渡しと値渡しの違いは何ですか?

于 2013-03-16T08:13:57.867 に答える