2012-03-11 6 views
0

나는 radixsort를 사용하여 숫자 목록을 정렬하려고합니다. 하지만 여러 번 시도한 후에도 해결할 수없는 컴파일러 문제가 발생했습니다.정렬 숫자 컴파일러 오류

두 개의 포인터가 목록의 뒤에 있고 다른 하나는 앞에 있습니다. base는 radixsort에 사용하는 버킷 수입니다. 내가 얻고

struct listnode **front,**back; 
front = malloc(sizeof(*front) * base); 
back = malloc(sizeof(*back) * base); 

오류는 다음과 같습니다 도움에 미리

invalid conversion from void* to listnode**[-fpermissive] 

감사합니다.

+0

다음에 코드를 포맷하십시오. –

+0

C++을 사용하고 있지만 C 언어로 태그 ​​된 것처럼 보입니다. 어떤 언어를 사용하고 있습니까? – Marlon

+0

@ Marlon cmd에서 g ++를 사용하고 있습니다. – exlux15

답변

4

C 프로그램을 컴파일하는 데 C++ 컴파일러를 사용하는 것처럼 보입니다. 둘 중 하나를 수행하거나 malloc() 호출의 반환 값에 대한 변환을 추가하십시오.

+0

Windows에서 g ++을 사용하고 있습니다. malloc에 ​​대한 타입 변환은 어떻게합니까? – exlux15

+1

당신의 경우'front = (listnode **) malloc (sizeof ....)'. 하지만 왜 C++ 컴파일러를 사용하고 싶습니까? –

+0

gcc 또는 g ++ 컴파일러를 통해 프로그램을 작성해야합니다. 나는 당신의 제안을 시도하고 그것은 작동합니다. 감사. – exlux15

0

코드가 C 프로그램으로 올바르게 작동합니다. 당신은 C++ 프로그램으로 컴파일하려면, 아직 ...이 다음 컴파일시이 .c 확장자

을 파일을 저장, 당신은 그 이유가 있다는 것입니다

struct listnode **front,**back; 
    front = static_cast<listnode**> (malloc(sizeof(*front) * base)); 
    back = static_cast<listnode**> (malloc(sizeof(*back) * base)); 

으로 캐스팅을 할 필요가 C++은 강력한 형식의 언어이며 C와 같은 포인터간에 변환 유형을 허용하지 않습니다. C++에서 이러한 캐스트를 명시 적으로 지정해야합니다. 포인터 간의 암시 적 캐스트는 하드 찾기 버그의 출처이므로 C++에서 지원되지 않습니다.