我遇到了“没有适当的默认构造函数可用”错误的问题,这可能只是我遗漏的一件小事。我对 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++ 中必须注意的许多小细节之一。