2013-06-03 2 views
-2

g ++로 c 코드를 컴파일 중이고 몇 가지 문제가 있습니다. 나는이 오류와 함께 남아있어 지정된 이니셜 라이저를 고정 후 :g ++로 C 코드 컴파일 : 유효하지 않은 변환

error: invalid conversion from 'void*' to '__u8*' 

이 내 코드입니다 :

static inline void put_unaligned_le16(__u16 val, __u16 *cp) 
    { 
     __u8 *p = (void *)cp; 

     *p++ = (__u8) val; 
     *p++ = (__u8) (val >> 8); 
    } 

이 고정 어떤 도움에 감사드립니다! 감사합니다.

+2

는 오류가 예쁜 clear : C (암시 적 변환)에서는 유효하지만 C++ _ (형식 시스템이 "더 안전")에서는 유효하지 않은'void *'를 사용하여'__u8 *'을 초기화하려고합니다. GCC로 컴파일하거나'cp'를'__u8 *'으로 명시 적으로 캐스팅하십시오 (그러나 엄격한 앨리어싱 문제를주의하십시오 ...) –

+0

void 포인터는 명시 적으로 타입 캐스팅되어야합니다. –

답변

4

C++ 컴파일러를 사용하여 C 코드를 컴파일하지 마십시오. 이제까지. 그들은 매우 별개이며 다른 언어입니다.


은 (당신이 어떤 이상한 자학 이유로 그럼에도 불구하고 할 경우 C++에, void *에서 암시 적 변환이 발생하지 않기 때문에, 당신은 너무 나쁜., __u8 *void * 캐스팅해야합니다.)

+0

감사! 그러나이 gadgetfs 예제 (www.linux-usb.org/gadget/usb.c)를 수정하여 C++ 코드를 사용해야합니다. – tzippy

+0

@tzippy 왜 당신이 **해야하는지 이해가 안되요. ** C 파일입니다. C 컴파일러를 사용하여 컴파일하십시오. –

+0

std :: vector를 사용하여 g ++ 컴파일러가 필요합니다. 그게 뭐가 나쁜거야? – tzippy