0

「適切なデフォルトコンストラクターがありません」というエラーに問題があります。おそらく、欠けているのはほんの1つです。私は C++ にかなり慣れていませんが、ゆっくりと理解しています。

私が理解しているように、コンストラクターを指定しない場合、C++ はデフォルトのコンストラクターを作成します。ただし、コンストラクターを指定していないにもかかわらず、エラーが発生します。私はこれに対する解決策をグーグルで試しましたが、他の誰もがクラスを間違って拡張しているか、指定されたコンストラクターを持っているため、このエラーが発生します。コンストラクターを指定していませんが、とにかくこのエラーが発生します。DirectXGame クラスは以下のとおりです。

DirectXGame.h

#include "StdAfx.h"
#include "DirectInputHelper.h"

class DirectXGame
{
public:
    //DirectXGame();

    bool Initialize(HINSTANCE hInstance, HWND windowHandle);
    void ShutDown();

    bool LoadContent();
    void UnloadContent();

    void Update(float timeDelta);
    void Render();

private:
    HINSTANCE progInstance;
    HWND winHandle;

    D3D_DRIVER_TYPE driverType;
    D3D_FEATURE_LEVEL featureLevel;

    ID3D11Device* pDev;
    ID3D11DeviceContext* pDevContext;
    ID3D11RenderTargetView* pBackBufferTarget;
    IDXGISwapChain* pSwapChain;

    DirectXInput::DirectInputHelper inputHelper;
    DirectXInput::KeyboardState* keyboardDevice;
    DirectXInput::MouseState* mouseDevice;

    bool isShutDown;
};

コメントアウトされているため、コンストラクターを指定していないことに注意してください。実際のエラーは、クラスの新しいインスタンスを作成するメイン メソッドの行でスローされます。

DirectXApp.cpp

int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow )
{

    UNREFERENCED_PARAMETER( hPrevInstance );
    UNREFERENCED_PARAMETER( lpCmdLine );

    if( FAILED( InitWindow( hInstance, nCmdShow ) ) )
        return 0;

    //std::auto_ptr<DirectXGame> DirectXGame( new DirectXGame() );
    DirectXGame* game = new DirectXGame(); //The compile error is on this line.


    bool result = game->Initialize(g_hInst, g_hWnd);

    if(!result)
    {
        game->ShutDown();


return -1;
}

// Main message loop
MSG msg = {0};
while(TRUE)
{
    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);

        if(msg.message == WM_QUIT)
            break;
    }
    else
    {
        game->Update(0.0f);
        game->Render();
    }
}

game->ShutDown();

//Don't forget to delete the game object, as it is a pointer.
delete game;

return static_cast<int>(msg.wParam);

}

C++ で注意を払わなければならない多くの細かい点の 1 つが欠けているだけかもしれません。

4

1 に答える 1

2

空白/デフォルトのコンストラクターがありません。コンパイラーは、自動的に実装する方法を推測できません。

自明な (複雑でない) クラスの場合、C++ は空のコンストラクターを作成します。クラスが別のクラスの子孫である場合、その祖先はデフォルトのコンストラクターを実装するか、それ自体が自明である必要があります。

クラスに他のクラスが含まれる場合、含まれるクラスにはデフォルトのコンストラクターが定義されているか、コンパイラーがそれらのクラスにも自明なコンストラクターを実装できるように、それ自体が自明である必要があります。

あなたの場合、DirectXInput::DirectInputHelper inputHelper;クラスに先祖がなく、すべてのデータメンバーがポインター、基本データ型、またはその1つのクラスデータ変数以外の定義済みデータ型であるため、原因が考えられます。

于 2012-05-12T16:10:11.203 に答える