티스토리 뷰
발생일: 2013.10.19
문제:
며칠 전부터 와이프와 함께 하루에 한 문제씩 알고리즘을 풀기로 했다.
문제:
며칠 전부터 와이프와 함께 하루에 한 문제씩 알고리즘을 풀기로 했다.
와이프는 자바로, 난 C로. ㅎㅎ
알고스팟(http://algospot.com/)에서 한 문제씩 골라서 풀어나가기 시작하고 있는데,
C는 책으로만 읽은 터라 삽질이 많다. -_-;
정렬을 위해 `qsort()`의 파라미터로 문자열 비교 함수를 전달하려고 하는데,
로컬에선 정상적으로 수행되는 것이 채점하는 서버에선 아래와 같은 컴파일 오류가 난다.
invalid conversion from ‘const void*’ to ‘const int*’
뭔가 문제일까...?
해결책:
포인터를 형변환할 때의 문법이 컴파일러마다 약간씩 다른 모양이다.
난 `gcc`로 컴파일하고 있었는데, 채점 서버는 `g++` 컴파일러를 사용하고 있었다.
컴파일 에러가 난 코드는 아래와 같다.
int compare(const void* a, const void* b) {
const int* arg1 = a;
const int* arg2 = b;
return *arg1 - *arg2;
}
검색해보니, C++ 컴파일러에선 선언 이후에 형변환을 해줘야 하고,
형변환하는 타입을 명시적으로 써줘야 한단다.
아래처럼 수정하면 `g++` 컴파일러에서도 오류 없이 수행된다.
int compare(const void* a, const void* b) {
const int* arg1;
const int* arg2;
arg1 = (int*) a;
arg2 = (int*) b;
return *arg1 - *arg2;
}
반응형
댓글
공지사항