2015-09-27 42 views
-3

我正在製作黑白棋遊戲。 幾乎所有的都是編碼的,我需要運行程序。 但是,有錯誤C2228。 我不知道爲什麼會出現此錯誤。 在我的代碼中,哪一行是問題?錯誤C2228使用API​​

這是API代碼。

#include "Basic.h" 
#include "Othello.h" 
#include "resource.h" 

LRESULT CALLBACK WndProc (HWND , UINT , WPARAM , LPARAM) ; 
HINSTANCE g_hInst ; 
LPCWSTR lpszClass = TEXT ("First") ; 

//Tile tile() ; 

int APIENTRY WinMain (HINSTANCE hInstance , HINSTANCE hPrevInstance 
         , LPSTR lpszCmdParam , int nCmdShow) 
{ 
    HWND hWnd ; 
    MSG Message ; 
    WNDCLASS WndClass ; 
    g_hInst = hInstance ; 

    WndClass.cbClsExtra = 0 ; 
    WndClass.cbWndExtra = 0 ; 
    WndClass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; 
    WndClass.hCursor = LoadCursor (NULL , IDC_ARROW) ; 
    WndClass.hIcon = LoadIcon (NULL , IDI_APPLICATION) ; 
    WndClass.hInstance = hInstance ; 
    WndClass.lpfnWndProc = (WNDPROC)WndProc ; 
    WndClass.lpszClassName = lpszClass ; 
    WndClass.lpszMenuName = NULL ; 
    WndClass.style = CS_HREDRAW | CS_VREDRAW ; 
    RegisterClass (&WndClass) ; 

    hWnd = CreateWindow (lpszClass , lpszClass , WS_OVERLAPPEDWINDOW , 
     CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , 
     NULL , (HMENU) NULL , hInstance , NULL) ; 
    ShowWindow (hWnd , nCmdShow) ; 

    while (GetMessage (&Message , 0 , 0 , 0)) 
    { 
     TranslateMessage (&Message) ; 
     DispatchMessage (&Message) ; 
    } 
    return Message.wParam ; 
} 

LRESULT CALLBACK WndProc (HWND hWnd , UINT iMessage , WPARAM wParam , LPARAM lParam) 
{ 
    HDC hdc , hMemdc [ 3 ] ; 
    PAINTSTRUCT ps ; 
    HBITMAP hEmpty , hBlack , hGray ; 
    BITMAP bit ; 
    Tile tile() ; 

    switch(iMessage) 
    { 
    case WM_LBUTTONDOWN : 
     break ; 

    case WM_PAINT : 

     hdc = BeginPaint (hWnd , &ps) ; 

     for (int i = 0 ; i < 3 ; ++i) 
     { 
      hMemdc [ i ] = CreateCompatibleDC (hdc) ; 
     } 

     hEmpty = LoadBitmap (g_hInst , MAKEINTRESOURCE (IDB_BITMAP1)) ; 
     hBlack = LoadBitmap (g_hInst , MAKEINTRESOURCE (IDB_BITMAP2)) ; 
     hGray = LoadBitmap (g_hInst , MAKEINTRESOURCE (IDB_BITMAP3)) ; 

     SelectObject (hMemdc [ 0 ] , hEmpty) ; 
     SelectObject (hMemdc [ 1 ] , hBlack) ; 
     SelectObject (hMemdc [ 2 ] , hGray) ; 

     for (int j = 0 ; j < 10 ; ++j) 
     { 
      for (int i = 0 ; i < 10 ; ++i) 
      { 
       BitBlt (hdc , 50 * i , 50 * j , 50 , 50 , hMemdc [ tile . iTileinfo (i , j) ] , 0 , 0 , SRCCOPY) ; 
      } 
     } 

     BitBlt (hdc , 550 , 250 , 50 , 50 , hMemdc [ 2 - (tile . bTurninfo()) ] , 0 , 0 , SRCCOPY) ; 

     DeleteObject (hEmpty) ; 
     DeleteDC (hMemdc [ 0 ]) ; 
     DeleteObject (hBlack) ; 
     DeleteDC (hMemdc [ 1 ]) ; 
     DeleteObject (hGray) ; 
     DeleteDC (hMemdc [ 2 ]) ; 

     EndPaint (hWnd , &ps) ; 

     break ; 

    case WM_DESTROY : 
     PostQuitMessage (0) ; 
     return 0 ; 
    } 
    return (DefWindowProc (hWnd , iMessage , wParam , lParam)) ; 
} 

這是類代碼。

#include "Othello.h" 

Tile :: Tile() 
{ 
    aryRemover = new Remover [ 8 ] ; 

    for (int i = 0 ; i < 8 ; ++i) 
    { 
     aryRemover [ i ] . iDirection = 0 ; 
     aryRemover [ i ] . iNum = 0 ; 
    } 

    for (int i = 0 ; i < 10 ; ++i) 
    { 
     for (int j = 0 ; j < 10 ; ++j) 
     { 
      iAry [ i ] [ j ] = 0 ; 
     } 
    } 

    iAry [ 4 ] [ 4 ] = 1 ; 
    iAry [ 4 ] [ 5 ] = 2 ; 
    iAry [ 5 ] [ 4 ] = 2 ; 
    iAry [ 5 ] [ 5 ] = 1 ; 

    bTurn = false ; 
    iCount = 0 ; 
} 

Tile :: ~ Tile() 
{ 
    delete [] aryRemover ; 
} 

void Tile :: Possible (int iX , int iY) 
{ 
    if (bTurn) // Player 1 
    { 
    long code 
    } 

    else // Player 2 
    { 
    long code 
    } 
} 

void Tile :: Change (int iX , int iY) 
{ 
    if (bTurn) // Player 1 
    { 
     for (int i = 0 ; i < iCount ; ++i) 
     { 
      switch (aryRemover [ i ] . iDirection) 
      { 
      case 0 : 
       long code 
      default : 
       break ; 
      } 

     } 

     bTurn = false ; // Turn Player 2 
     iCount = 0 ; 
    } 

    else // Player 2 
    { 
     for (int i = 0 ; i < iCount ; ++i) 
     { 
      switch (aryRemover [ i ] . iDirection) 
      { 
      case 0 : 
       long code 
      default : 
       break ; 
      } 
     } 

     bTurn = true ; // Turn Player 1 
     iCount = 0 ; 
    } 
} 

int Tile :: iTileinfo (int iX , int iY) 
{ 
    return iAry [ iX ] [ iY ] ; 
} 

bool Tile :: bTurninfo() 
{ 
    if (bTurn) 
     return true ; 
    else 
     return false ; 
} 

void Tile :: Routine (int iX , int iY) 
{ 
    Tile :: Possible (iX , iY) ; 
    Tile :: Change (iX , iY) ; 
} 

和錯誤。

錯誤C2228:'.bTurninfo'的左邊必須有class/struct/union。

錯誤C2228:'.iTileinfo'的左邊必須有class/struct/union。

問題代碼在API代碼中。

WM_PAINT部分,代碼使用Bitblt函數。

我等待你的回答。 祝你有美好的一天:)

回答

2
Tile tile() ; 

聲明一個函數tile()。

你想

Tile tile; 

它創建圖塊對象

+0

然後平鋪對象無法訪問到受保護的成員。 – Rica

+0

@Rica那些成員應該是公開的。 –

+0

@Rica請繼續留言。無法看到類別聲明,並且在該問題中沒有提及受保護的成員。你問了一個編譯器錯誤,這就是答案。 –