0

同じアプリケーションの2つのバージョンがあり、グラフィカルUIとQTを使用しているバージョンでは、ランタイムエラーが発生します。

first-chance exception  access violation writing location 

を参照して

this->secondi_totali = someint;

モデルメソッド内で起動されます。私のモデルクラスは次のとおりです。

class Model {

public:

friend class Controller; //dico che controller può accedere alle cose private
//friend class cronometro_qt;


/*costruttore*/
Model();


void set(int,int,int);
int get_secondi();
int get_minuti();
int get_ore();
void tick();


private:
int secondi_totali;
int secondi_trascorsi;

int secondi;
int minuti;
int ore;

};

例外の原因となる方法は次のとおりです。

void crono::Model::set(int ore, int minuti, int secondi) {
this->secondi_totali =  ore * 3600 + 60 * minuti + secondi;
this->secondi_trascorsi = 0;
 }

スタック内はこのメソッドから呼び出されます。

void crono::Controller::set(int ore, int minuti, int secondi) {

this->modello->set(ore, minuti, secondi);

}

this-> modelloは、明らかにControllerアイテム内のModelオブジェクトへのポインターです。

前にも言ったように、私は自分のプログラムの2つのバージョンを実行しました。

最初に、コントローラーのset()メソッドは、空のクラスであるビューの単純なメソッドによって呼び出されます。

2番目のバージョンでは、コントローラーのset()メソッドは

void crono::cronometro_qt::on_pushButton_clicked() { /* ... */ }

方法。

明らかに、どちらのバージョンでも、次のようにset()メソッドを呼び出すために、空のビューまたはcronometro_qt(QMainWindowのサブクラス)にコントローラーへのポインターがあります。

this->controller->set(ore,minuti, secondi);

では、なぜQTバージョンがその例外をスローするのでしょうか。

4

1 に答える 1

0

変数を初期化する前に、アプリケーションのイベント ループ (a.exec()) に入ります。exec() は、アプリケーションが終了する前に戻りません。初期化を a.exec() の上に移動します。

于 2013-02-06T10:18:08.493 に答える