0

QTで使用している2つの方法があります。PRINTR 関数は COURSE オブジェクトから情報を出力するだけで、PRINTN は 2 つのベクトルの違いを見つけ、PRINTR を使用して結果を出力することになっています。PRINTR 関数は正常に動作しますが、PRINTN の動作に問題があります。

void course::printr(vector<course*> c){
QString string1,string2;
for(int i = 0; i < (int)c.size();i++){
    string1 = c[i]->getSubjectCourse();
    string2 = c[i]->getTitle();
    emit send(QString("%1\t%2").arg(string1).arg(string2));
    }
}

単純なオブジェクト ベクトルだけを使用しようとすると、QObject は数十行の長さのプライベートであるというエラーが表示されます。このため、ポインター ベクトルを使用する必要があります。

void course::printn(vector<course> a,vector<course> compA){
sort(a.begin(),a.end());
sort(compA.begin(),compA.end());
vector<course*> diff;
set_difference(a.begin(),
                a.end(),
                compA.begin(),
                compA.end(),
                inserter(diff,diff.begin()));
course().printr(diff);
}

次の行の PRINTN メソッドでポインター ベクター DIFF を使用すると、問題が発生します。

inserter(diff,diff.begin()));

エラー メッセージは非常に長いですが、ポインター ベクトルを挿入関数に渡そうとしているため、不平を言っていると思います。通常のオブジェクトベクターを使用すると、挿入関数は単独で機能しますが、QObject is private エラーが発生します。これを現在の構造で機能させる方法はありますか? いくつかのバリエーションを試しましたが、QT の構造が原因で機能しません。これをすべて明確に説明したことを願っていますが、私が達成しようとしていることについてさらに説明が必要な場合はお知らせください. 前もって感謝します。

4

1 に答える 1

0

stl コンテナーでオブジェクトを使用するための最も重要な要件の 1 つは何ですか? それらはコピー可能でなければなりません。QObjects の最も重要な制限の 1 つは何ですか? はコピーできません。私はあなたのコードを実際には読んでいませんでしたが、「vector<>」と「QObject is private error」が表示されました...これ以上の情報は必要ありません。

于 2013-08-12T19:00:53.470 に答える