0

OpenGLでオブジェクトをロードおよびレンダリングするためのクラスがあります。オブジェクトをロードするために、LoadFile(std :: string FilePath)という関数があります。これは問題なく機能しますが、コンストラクターからファイルをロードしたいので、これを試してみました。

CObject(std::string FilePath)
{
    CObject(); // set all values to 0
    LoadFile(FilePath);
}

しかし、これを行うと、レンダリングしようとするたびにアプリがクラッシュし、なぜ:sなのか本当にわかりません。

4

3 に答える 3

2

コンストラクター内から同じクラスのコンストラクターを呼び出すと、Java としては機能しません (つまり、ジョブの一部をより一般的なコンストラクターに委譲します)。その構文は、デフォルトのコンストラクターで新しい一時オブジェクトを作成していることを意味します。

唯一近いものは、C++11 の委譲コンストラクターです。

CObject(std::string FilePath): CObject()
{
    LoadFile(FilePath);
}
于 2012-04-26T18:11:18.793 に答える
2

CObject();すべての値を 0 に設定するわけではありませんが、一時オブジェクトを作成します。そのはず:

CObject(std::string FilePath)
{
    //manually set fields to 0
    LoadFile(FilePath);
}

既定のコンストラクターも自分自身を再度呼び出す場合は、スタック オーバーフロー エラーである可能性が最も高くなります。

于 2012-04-26T18:11:26.497 に答える
1

コンストラクターを呼び出してすべての値を 0に設定する場合。現在のオブジェクトの値をすべて 0 に設定するのではなく、 CObject()実際には一時オブジェクトを作成しています。CObject

ファイルをロードする前にデフォルト コンストラクターと他のコンストラクターの両方が呼び出すことができるプライベートな初期化メソッドを作成するか、CObject(std::string FilePath)コンストラクターでオブジェクト メンバーを初期化する必要があります。

于 2012-04-26T18:12:12.803 に答える