2012-01-07 5 views
2

참고 : 제목에이 이름이 포함 된 10 억 개의 중복이 아닙니다. 이것은 포인터와 매우 이상한 것들과 관련이 있습니다. == 대신 우발적 인 =이 아닙니다.홀수 위치의 "왼쪽 값 피연산자로 왼쪽 값이 필요함"- C++

나는 이라는 void* 인수가있는 C++ 함수가 있습니다. uint32_t*에서

(char*)out=new char[*size]; 

size :이 라인을 가지고있다. 컴파일러가 불평합니다 :

fundemental_bin_types.h:55:32: error: lvalue required as left operand of assignment 

무엇이 잘못 되었습니까?

+2

왜 여기에 캐스트 ('(char *)')가 필요하다고 생각합니까? –

+1

'(char *)'? 'void *', POD를 포인터로 전달 하는가? '새로운 char []'? C++이 맞나요? – Johnsyweb

+0

예. 그냥 아주 이상한 C++. 매우 이상한 C++. 이것은 함수 포인터에 의해 참조되어야하는 함수 집합의 일부입니다. 그들은 모든 종류의 데이터를 반환 할 수 있어야하지만, 호출자와 최종 호출자 만 유형을 알고 있습니다. 중간 코드 (내 메인 코드)는 타입이 무엇인지 알지 못하기 때문에'int'와'char's 같은 것을 void *로 전달해야합니다. – Linuxios

답변

7

(char*)out하지 좌변입니다 (그 자체가 될 수있다 out하지만 캐스트 것들을 변경) 캐스트가 할당의 반대편에 속한 사용자가 문자 포인터가 아닌 무효 포인터로 캐스팅하고, :

어떤 경우
out = (void*) (new char[*size]); 

void* 다른 포인터에서 암시 적으로 변환 당신은 멀리 얻을 수 있도록 :

out = new char[*size]; 
+0

왜 캐스트가 꼭 필요하다고 생각하십니까? –

0

가제거그것은 여기에 목적이 없습니다. (또는 설명하지 않은 목적을 제공합니다.)

void * 인수가있는 경우 void*&처럼 간단하게 할당 할 수 없습니다 (호출자가 포인터를 볼 수 있도록). 논의.

1

포인터 캐스팅은 왼쪽 값을 만듭니다. 참조 유형으로 변환하지 않으면 C++ 포인터 캐스트가 수행되지 않습니다. 즉, 다음은 컴파일해야합니다 :

(char *&)out= new char[*size]; 
관련 문제