2

私がこのオブジェクトを持っているとしましょう:

class Game{
public:
    void SetPointer(D2DResources&);

public:
    D2DResources* pD2DResources;
};

この関数で:

void Game::SetPointer(D2DResources& p)
{
    pD2DResources=&p;
}

そして、私は WinMain でそれを行います:

Game game;

D2DResources d2DResources();

game.SetPointer(d2DResources);

それはうまくいきますか?そうでない場合、それを行う正しい方法は何ですか? アイデアは、後で次のように d2DResources の関数にアクセスすることです。

pGame->pD2DResources->OnRender();

pGame は、上記のゲーム オブジェクトへのポインターです。

4

1 に答える 1

1

指摘されたインスタンスが存続している限り、あなたのアプローチに問題はありません。しかし、関数でインスタンスを宣言したいようですWinMain。その場合、機能しません。

最初に 1 つの nit を取得しましょう: 次の行

D2DResources d2DResources();

D2DResourcesは、型の変数ではなく、パラメータなしで andを返す関数を宣言しますD2DResources。後者が必要な場合は、括弧を削除します。

D2DResources d2DResources;

ここで、インスタンスをより長く存続させたい場合は、std::shared_ptr. 例は次のようになります。

class Game{
public:
    void SetPointer(D2DResources&);

public:
    std::shared_ptr<D2DResources> pD2DResources;
};

void Game::SetPointer(std::shared_ptr<D2DResources> p)
{
    pD2DResources=p;
}

WinMain、次を使用します。

Game game;

auto d2DResources = std::make_shared<D2DResources>();

game.SetPointer(d2DResources);

使用法はあなたが望んでいたものと同じままです。

于 2013-03-15T22:40:45.517 に答える