в том числе заголовки приводят к ошибкам - PullRequest
2 голосов
/ 27 декабря 2011

по некоторым причинам я получаю несколько ошибок, как только я включаю свой собственный файл заголовка, который имеет простое определение класса.Вот код:

#define WIN32_LEAN_AND_MEAN 
#include "windows.h"
//#include "CInt.h"   <--- i get multiple errors once i activate this line

HINSTANCE       hInst;
HWND            wndHandle;

bool        initWindow(HINSTANCE hInstance);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    if (!initWindow(hInstance)) return false;

    MSG msg;
    ZeroMemory(&msg, sizeof(msg));

    while(true)
    {
        while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

        if(msg.message == WM_QUIT) break;
    }

    return msg.wParam;
}

bool initWindow(HINSTANCE hInstance )
{
    WNDCLASSEX wcex;

    wcex.cbSize             = sizeof(WNDCLASSEX);
    wcex.style              = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc        = WndProc;
    wcex.cbClsExtra         = 0;
    wcex.cbWndExtra         = 0;
    wcex.hInstance          = hInstance;
    wcex.hIcon              = LoadIcon(0, IDI_APPLICATION);
    wcex.hCursor            = LoadCursor(0, IDC_ARROW);
    wcex.hbrBackground      = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
    wcex.lpszMenuName       = 0L;
    wcex.lpszClassName      = L"MOVEENGINE";
    wcex.hIconSm            = 0;

    RegisterClassEx(&wcex);

    wndHandle = CreateWindow(L"MOVEENGINE", L"MOVE ENGINE", WS_EX_TOPMOST | WS_POPUP | WS_VISIBLE, 0, 0, 1920, 1080, NULL, NULL, hInstance, NULL);

    if (!wndHandle) return false;

    ShowWindow(wndHandle, SW_SHOW);
    UpdateWindow(wndHandle);

    return true;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int iVirtKey = static_cast<int>(wParam);

    switch (message)
    {
        case WM_KEYDOWN:
            switch(iVirtKey)
            {
                case VK_ESCAPE:
                    PostQuitMessage(0);
                    break;
            }
            return 0;

        case WM_DESTROY:
            PostQuitMessage(0);
            break;
    }

    return DefWindowProc(hWnd, message, wParam, lParam);
}

также код CInt.h:

class CInt
{
public:
    int k;

    CDirect3DDevice(int x):k(x){};
}

Так что же не так с моим кодом?(Я использую Visual Studio 2010)

Ответы [ 2 ]

7 голосов
/ 27 декабря 2011

Вам не хватает точки с запятой после определения класса в вашем файле .h.

2 голосов
/ 27 декабря 2011

Помимо отсутствующей точки с запятой dasblinkenlight, которую вы указали, вы также инициализируете элемент из метода, который не является конструктором, здесь:

CInt::CDirect3DDevice(int x) : k(x) {};

Это приведет к ошибкам, поскольку члены могут использовать только : k(x) синтаксис класса ctor, а не других методов.

Похоже, что это могут быть ошибки копирования-вставки-редактирования, но без публикации ошибок, которые вы получаете, невозможно точно сказать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...