none
error C2501: 'CURSORINFO' : missing storage-class or type specifiers RRS feed

  • 질문

  • 안녕하세요 CURSORINFO구조체을 사용해서 프로그램을 컴파일하는데 제목과 같은 에러가 계속발생합니다.

    MSDN 나와 있는데로 winuser.h을 인클루드했는데 같은 결과 이네요.

    vs6.0 vs2005,vs2008 다 동일한 에러가 발생합니다.

    무엇이 잘못되었는지 부탁드립니다.

    **********************************************

    #include <stdio.h>

    #include <conio.h>

    #include <windows.h>
    #include <WinUser.h>
    int cusoroff();
    int gotoxy(int x, int y);
    int wherex();
    int wherey();
    CURSORINFO ci;//에러발생

    HANDLE consoleHandler = GetStdHandle(STD_OUTPUT_HANDLE);
    int SelectWindow(int x, int y, char** menu);
    // getch() 를이용해서방향키값을읽어올수있도록함
    int GetCode();

    #define KEY_UP      (256 + 72)
    #define KEY_DOWN    (256 + 80)
    #define KEY_LEFT    (256 + 75)
    #define KEY_RIGHT   (256 + 77)
    #define KEY_ENTER   13

    // 메뉴내용을적음
    char* menu[] = {
           "Menu A",
           "Menu B",
           "Menu C",
           NULL   // 마지막엔NULL 문자열
     };

    int main()
    {
      POINT point;
           int select;
        CURSORINFO ci;
        ci.cbSize=sizeof(CURSORINFO);

           cusoroff();
           gotoxy(0, 0);

           printf("게임을시작합니다.");
           select = SelectWindow(20, 5, menu);

           gotoxy(0, 24);
           printf("%s 가선택되었습니다.", menu[select]);

           return 0;
    }

    int SelectWindow(int x, int y, char** menu)
    {
           // 메뉴윈도우의첫번째줄에최초커서위치
           int cursor = 0;
           int i;
           int ch;
           int menus;
           // 일단전체메뉴가몇개인지좀세어놓는다
           for ( menus = 0; menu[menus] != NULL; ++menus );

           do
           {
                 // 전체메뉴를출력
                 for ( i = 0; i < menus; ++i )
                 {
                        gotoxy(x, y+i);
                        printf("⊙%s", menu[i]);
                 }
                 // 현재cursor 위치표시
                 gotoxy(x, y+cursor);
                 printf("☞");
     
                 // 사용자로부터입력을기다린다
                 ch = GetCode();
                 switch ( ch )
                 {
                 // 커서를한칸위로이동
                 case KEY_UP:
                        --cursor;
                        if ( cursor < 0 )
          cursor = menus - 1;
                  break;
                 // 커서를한칸아래로이동
                 case KEY_DOWN:
                        ++cursor;
                        if ( cursor >= menus )
          cursor = 0;
                        break;
                 default:
                        break;
                 }

           // 엔터키가눌러질때까지
           } while ( ch != KEY_ENTER );

           return cursor;
    }

    int GetCode()
    {
           int ch = getch();
           // 확장키코드확인
           if ( ch == 0 || ch == 224 )
                 ch = 256 + getch();
           return ch;
    }

    int cusoroff()
    {
           CONSOLE_CURSOR_INFO cursorInfo;
           cursorInfo.bVisible = FALSE;
           cursorInfo.dwSize = 10;

           return SetConsoleCursorInfo(consoleHandler, &cursorInfo);
    }

    int gotoxy(int x, int y)
    {
           if (consoleHandler == INVALID_HANDLE_VALUE)
                 return 0;

           COORD coords = {static_cast<short>(x), static_cast<short>(y)};
           SetConsoleCursorPosition(consoleHandler, coords);

           return 1;
    }

    int wherex()
    {
           if (consoleHandler == INVALID_HANDLE_VALUE)
                 return 0;

           CONSOLE_SCREEN_BUFFER_INFO screenInfo;
           GetConsoleScreenBufferInfo(consoleHandler, &screenInfo);

           return screenInfo.dwCursorPosition.X;
    }

    int wherey()
    {
           if (consoleHandler == INVALID_HANDLE_VALUE)
                 return 0;

           CONSOLE_SCREEN_BUFFER_INFO screenInfo;
           GetConsoleScreenBufferInfo(consoleHandler, &screenInfo);
           return screenInfo.dwCursorPosition.Y;
    }

    2011년 10월 20일 목요일 오전 9:19

모든 응답

  • 안녕하십니까? basjeon

    Microsoft TechNet Forum 사이트를 방문해 주셔서 감사합니다.

     

    고객님께서 문의하신 내용은 확인 중에 있습니다. 답답하시겠지만,  조금만 기다려주시면 답변을 작성 하겠습니다.

    2011년 10월 26일 수요일 오전 3:53
    중재자
  • 안녕하십니까? basjeon

    Microsoft MSDN Forum 사이트를 방문해 주셔서 감사합니다.

     

    문의 하신 “error C2501: 'CURSORINFO' : missing storage-class or type specifiers”에 대한 답변을 드리겠습니다.

                

    올려주신 코드 자체에는 문제가 없습니다.

    올려주신 코드 그대로, Visual Studio 2005 2010에서 성공적으로 빌드하였습니다.  프로젝트를 처음에 어떻게 생성하셨는지 궁금합니다.

    New Project에서 Console 타입으로 생성하여 시도해 보시기 바랍니다. 그리고 #include 문에서는 windows.h winuser.h 중 하나만 include 하시고, 혹시 로컬 폴더에 동일한 이름의 헤더 파일이 존재하는 것은 아닌지 확인해 보시기 바랍니다.

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    2011년 10월 31일 월요일 오전 1:43
    중재자
  • 안녕하십니까? basjeon

    Microsoft MSDN Forum 사이트를 방문해 주셔서 감사합니다.

    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다. 하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다.

     

    2011년 11월 4일 금요일 오전 8:24
    중재자