2012-12-06 4 views
-7
내가 GCC 버전으로 컴파일하려고

4.3.2 20081105 (레드햇 4.3.2-7) (GCC) 입력 파일이 CONST 문자가 :g ++ 문자 NULL 오류

#include <stdio.h> 
#include <stdlib.h> 
#include "textfile.h" 
... 
const char * vs=NULL; 
vs = textRead("myfile.file"); 
const char * vv = vs; 
free(vs); 

이 문자의 바르가를 메인 cpp 프로그램에 사용되며 텍스트로 채워집니다.

는 나는이 오류가 발생했습니다 (I 생각이 캐스트 변환입니다)하지만 난 실수를 어디에 모르는 myfile.file를

에서 데이터를로드 헤더 하나 개의 기능 textRead에 사용합니다.

warning: deprecated conversion from string constant to ‘char*’ 
error: invalid conversion from ‘const void*’ to ‘void*’ 

첫 번째 경고는 약 vs = textRead ("myfile.file"); 두 번째 오류는 약 무료입니다 (vs);

내 코드가 잘못되었습니다.

const char *textRead(char *) 

자동으로되지 않습니다 char *에 문자열 "myfile.file를"을 (유형 const char *이있는) 변환 : 당신의 textRead() 함수는 대부분 thusly 히 선언되기 때문에

+0

무엇이 잘못 되었나요?'free()'는'void *'를 기대하고'const void * '를 전달하고 있습니다. 컴파일러가 정확히 말한 것입니다. –

+0

나는 리눅스 OS에서 g ++를 사용하여이 cpp를 이해하는 데 필요한 훌륭한 튜토리얼이 필요하다고 생각한다. 미안해. 팀에 방해가 돼. –

+0

당신은 누군가를 방해하지 않았습니다. 질문을하고 배우는 것이 좋습니다. –

답변

0

다음과 같이 당신은 textRead 함수가 어떻게 생겼는지 게시, 그래서 나는 그것의 서명을 믿고있어하는 것은하지 않은 :

void *textRead(char *filename); 

textRead 읽을 파일의 이름을 취하고 그렇지 않습니다 (이 기능을 수정할 수없는 경우 전달 된 문자열을 수정, 그래서 textRead

void *textRead(char const *filename); 

을 변경할 필요가 없습니다)해야

에 코드를 변경
char filename[] = "myfile.file"; 
vs = textRead(filename); 

free에 대한 오류 메시지가 freevoid *을 기대하고 대신 그것을 const 포인터를 전달하고, 꽤 자기 설명이다. vschar * 대신 const char * 일 필요가있는 이유가 없습니다. 그것을 변경하면 오류가 사라질 것입니다.

또한 vs의 복사본을 만들고 나서 free 앞에 넣는 이유를 이해하지 못 하겠지만 그 두 줄 사이에 내용이 게시되지 않았을 수도 있습니다.

+0

만약 내가이 오류가있어 사용 : main.cpp : 116 : 오류 : '['토큰 전에 예상 unqualified - ID가 –

+0

@ CatalinFestila 미안, 배열 선언 구문을 엉망 이네. 결정된. – Praetorian

1

첫 번째 오류입니다. 대신에 const char *을 허용하도록 textRead를 수정하여 문제를 해결하십시오.

번째 오류 ... 음, 다시, 컴파일러는 당신을 말하고 무엇을 참조하십시오 뭔가가 void *을 기대하고 당신이 그것을 const void *을 전달하는 :이 경우, freevoid * 포인터를 필요로한다. 암시 적으로 const void *으로 변환 될 수있는 const char *이 있습니다. 그러나 const void *void *으로 만들 수 없습니다.

올바르게 const을 사용하여 적절하게 반환하여 문제를 해결하십시오.