"이전에 정의 된 x .... x의 재정의"가 많이 발생합니다. 이 오류는 무엇을 의미합니까?GCC 컴파일러 오류 : "재정의 ... 이전에 정의 됨"
11
A
답변
7
아마도 헤더 파일을 두 번 포함 할 것입니다. 헤더 파일이 #ifndef
문장으로 둘러싸여 있는지 확인하십시오.
http://www.fredosaurus.com/notes-cpp/preprocessor/ifdef.html
27
는 한 번만 포함되는 각 파일을 제한 할 필요가있다. 당신은 2 가지 방법으로 이것을 할 수 있습니다. 헤더 파일의 상단에
1) 넣어 :
#pragma once
또는 2) 컴파일러가 헤더 파일의 맨/마지막에 넣어 그, 지원하지 않는 경우
#ifndef _MYFILE_H_
#define _MYFILE_H_
...
#endif
을
MYFILE을 파일 이름으로 바꾸고 ...을 헤더 파일의 내용으로 바꿉니다.
10
오류는 한 위치에서 정의 된 기호가 있고 다른 위치에서 대체 정의가 작성되었음을 의미합니다.
경우이 같은 경우에 발생할 수 있습니다
-
가
- 가 아닌 사소한를 호출하는 기능과의 프로토 타입 사이에 불일치가있는 경우 같은 이름
- 로 두 가지 기능을 정의하는 경우 함수가 정의되기 전에 프로토 타입이없는 경우
이 마지막 경우에는 실제 함수와 컴파일러에서 가정하는 "암시 적 선언"사이의 불일치가 있습니다 그것은 사용할 프로토 타입이 없을 때입니다. . 그 함수의 프로토 타입은 그들이 static
을 경우 모든 기능은 파일 내에서 즉, 해당 범위 (내에서 고유 한 이름을 가지고 있음을 보장 한 번
- , 또는 :
이러한 상황
을 방지 할 수 있습니다 - 소스 파일에서
extern
문을 사용하여 프로토 타입을 선언하는 경우주의하십시오. 적절한 헤더 파일에서 프로토 타입을 사용하는 것이 더 좋습니다. static
함수의 경우 원본 파일 내에서 또는 다른 개체 파일에서 사용될 경우 헤더 파일에서 모든 함수에 프로토 타입이 있는지 확인하십시오.- 중 하나 메흐 다드와 브라이언 R. 본디에 의해 제안 된 구조의
관련 문제
- 1. 사용자 정의 CSS가 재정의 됨 - JSF Richfaces
- 2. C++ 컴파일러 오류 C2371 - WCHAR의 재정의
- 3. gcc 컴파일러 오류의 텍스트 변경
- 4. gcc 크로스 컴파일러 설치 방법
- 5. gcc 컴파일러 명령에 대한 질문
- 6. Gcc 컴파일러 명령 및 옵션
- 7. iPhone-gcc 컴파일러 설정 시도
- 8. gcc 오류 메시지 저장소
- 9. copy ctor에서 gcc 컴파일러 오류 : "token -> before token>"
- 10. 크로스 컴파일러 바이너리 실행 오류
- 11. C 오류 : 함수에 대한 정의되지 않은 참조이지만 정의 됨
- 12. .h 파일의 재정의 오류
- 13. 401 이전에 커밋 됨 인증이 지정되지 않았습니다.
- 14. Windows XP에서 GCC 컴파일러 오류가 발생했습니다.
- 15. 속성 도움, 컴파일러 오류
- 16. 컴파일러 오류 건물 Monoflector
- 17. gcc 4.3.3 컴파일러 옵션이 기본적으로 활성화되었습니다.
- 18. VLIW 아키텍처 용 GCC 컴파일러 인프라
- 19. gcc (v4.1.2 크로스 컴파일러) 정수 승격 문제
- 20. Java 코드에서 GCC 사전 컴파일러 실행
- 21. 리눅스 초심자 질문 : GCC 컴파일러 산출
- 22. 컴파일러 파이프 라인 정의
- 23. GCC 형식의 오류 메시지
- 24. GCC 4.2 빌드 오류
- 25. "int32 undeclared"gcc 오류
- 26. gcc 오류 메시지 시각화
- 27. virtualenv easy_install gcc 오류
- 28. gcc 오류 메시지
- 29. Cython 설치 GCC 오류
- 30. VIRTUALENV GCC 오류
내가의 #pragma는 GCC에서, VC++에없는 일이라고 생각 사용하여 모든 헤더 파일 만, 각 소스 파일에 대해 한 번 포함될 수 있음을 확인 . #define 트릭은 이식성이 있습니다. – Gorpik
gcc 및 vC++에 의해 supoprted –
위키피디아에서는 #pragma once는 VC++ 및 gcc http://en.wikipedia.org/wiki/Pragma_once에서 지원됩니다. –