0

はい、私は多くのチュートリアルと質問を読み、多くの組み合わせも試しましたが、うまくいかないようです. 私の目標は、動的割り当てを使用しないことです。

私のクラスは次のようになります。

Pages
Page
PMain:Page
PCam:Page

これを行うときのメインで:

1. メイン:

Page * page;
PCam main;
main.setContext(context);
page = &main;
page->echo();

結果:PCam

しかし、外部クラス内にインスタンスを作成してページに向けようとすると失敗します。

2.

ページ クラス:

Pages::Pages(Page*& page, Context& context){
    this->context = &context;
    PMain main;
    main.setContext(*this->context);
    main.echo();
    // page = &main; <---
} 

主要:

Page * page;
Pages pages(page, context);
page->echo();

結果: ページ

期待される結果: PCam

私のクラス:

ページ:

void Page::setContext(Context & context)
{
    this->context = &context;
}
void Page::echo()  //virtual
{
    std::cout << "echo Page"  << std::endl;
}

Pメイン:

void PMain::echo(){
    std::cout << "echo PMain"  << std::endl;}
}

PC カメラ:

void PCam::echo(){
    std::cout << "echo PCam"  << std::endl;}
}

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

1

あなたの問題、またはそれらの1つは、これです:

Pages::Pages(Page*& page, Context& context){
    [...]
    PMain main;

ローカルスタック変数です。この関数が戻ると、存在しなくなります。ポインターに割り当てた場合、それを使用すると未定義の動作が発生します。

私の目標は、動的割り当てを使用しないことです。

特別な理由がない限り、これはほとんど無意味な目標です。スタック オブジェクト (つまり、動的に割り当てられていないオブジェクト) へのポインターが必要な場合は、ポインターを使用している限り、そのオブジェクトはスコープ内にある必要があります。それができない場合は、ヒープに配置する (つまり、動的に割り当てる) 必要があります。

于 2014-07-20T18:48:39.980 に答える