ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [컴파일 에러] Error C2664
    else/error 2018. 12. 30. 15:20


    IDE: Visual studio 2017

    language: C++

    에러난 지점 :

    void setStage(char Maze[21][21], _POINT pPlayerPos,  _POINT pStartPos, _POINT pEndPos)
    void Output(char Maze[21][21], _POINT pPlayerPos)
    void MoveChr(char Maze[21][21], _POINT pPlayerPos, char cinput)



    Error

      error C2664: 'void setStage(char [][34],_POINT,_POINT,_POINT)': 인수 2을(를) 'POINT *'에서 '_POINT'(으)로 변환할 수 없습니다.
      error C2664: 'void Output(char [][34],_POINT)': 인수 2을(를) 'POINT *'에서 '_POINT'(으)로 변환할 수 없습니다.
      error C2664: 'void MoveChr(char [][34],_POINT,char)': 인수 2을(를) 'POINT *'에서 '_POINT'(으)로 변환할 수 없습니다.
      note: 가리킨 형식이 관련이 없습니다. 변환하려면 reinterpret_cast, C 스타일 캐스트 또는 함수 스타일 캐스트가 필요합니다.




    오류 해결법


    - 이번 에러는 미로 탈출 게임 예제를 가지고 연습하던 중 발생했다.

    분명 멀쩡히 돌아가던 코드였는데 왜 갑자기 컴파일 에러가 뜬걸까?

    첫번째로 유니코드로 인한 오류를 의심해볼 수 있다.



    1. 유니코드를 멀티 바이트로 변환하자.


    C2664는 유니코드로 인해 발생하는 대표적인 오류 중 하나이다.

    Visual studio 환경이 유니코드로 되어있는데 MBCS(Multi Byte Character Set)를 쓰진않았는지


    프로젝트 -> 속성 -> 구성 -> 프로젝트 기본값 -> 문자 집합


    1. 프로젝트 -> 속성 -> 구성속성 -> 프로젝트 기본값 (또는 일반)  -> 문자 집합 에서

    출처: https://huhmoo.tistory.com/2 [블로그란건 말이야..]
    1. 프로젝트 -> 속성 -> 구성속성 -> 프로젝트 기본값 (또는 일반)  -> 문자 집합 에서

    출처: https://huhmoo.tistory.com/2 [블로그란건 말이야..]
    1. 프로젝트 -> 속성 -> 구성속성 -> 프로젝트 기본값 (또는 일반)  -> 문자 집합 에서

    출처: https://huhmoo.tistory.com/2 [블로그란건 말이야..]

    에서 확인한다.

    만약 유니코드로 되어있다면 멀티바이트 문자 집합 사용로 변환

    혹은 유니코드에 맞춰 WBCS (Wide Byte Character Set)방식으로 코드를 수정한다.





    - 이 선에서 오류가 해결됐다면 다행이지만  C2664는 유니코드외에 다른 이유로 발생할 수 있다.

    그때 필요한 것이 두번째 방법 , 에러의 원인이 되는 인수 부분에 const를 붙이는 것이다.



    2. CONST 를 붙인다.


    error C2664: 'void setStage(char [][34],_POINT,_POINT,_POINT)': 인수 2을(를) 'POINT *'에서 '_POINT'(으)로 변환할 수 없습니다.


    에러 C2664는 메세지가 가리키는 것처럼 생정자 함수에서 전달받을 인자의 형과 실제로 전달할 인자의 형이 맞지않아 발생한 오류이다. 이게 무슨 뜻이냐하면 변수,인수,문자열 등은 메모리공간의 data에 저장되는데 이 저장된 값은 임의로 바꿀 수 있을지언정 값이 저장된 메모리 공간의 주소는 바꿀 수 없는 '상수'라 _POINT라는 포인터는 적절하지않은 형이라는 것


    따라서 _POINT를 상수를 담기에 적절한 그릇으로 바꿔주면 해결된다.
    앞에 CONST를 붙여 올바른 형태로 인자를 전달하게 하자





    Comment

Designed by black7375.