a.cpp에 정의 된 함수를 호출하여 b.cpp에서 사용하도록 할 수 있습니까 (헤더 파일의 a.cpp 함수를 선언하지 않아도됩니다).다른 소스 파일에 공통 헤더 파일 액세스 기능이 없습니다.
답변
예, 권장하지는 않지만.
실제로 헤더의 내용은 헤더의 내용을 전처리 기가 #include
지시어를 찾는 정확한 위치의 소스 코드에 효과적으로 넣는 것입니다. 대신 include 지시문을 사용 그래서 코드를 수동으로 해당 위치에 쓸 수있는 프로그램은 동일합니다 : 헤더와
:
://a.h
void foo();
//a.cpp
#include "a.h"
void foo() {
//do something
}
//b.cpp
#include "a.h"
void bar() {
foo();
}
로는 동일합니다 전처리 후
//a.cpp
void foo();
void foo() {
//do something
}
//b.cpp
void foo();
void bar() {
foo();
}
따라서 머리글을 생략하고 필요할 때마다 수동으로 함수를 선언 할 수 있습니다. 그러나 헤더는 프로젝트 전체에서 선언이 동일하도록 보장합니다. 예 : 당신이 매개 변수를 사용하는 foo
을 변경하는 경우 :
//a.h
void foo(int);
지금
b.cpp
에서 컴파일러는 호출
foo()
가 선언과 일치하지 않음을 알려줍니다. 당신이 헤더를 생략하고 대신 수동으로 선언하고
b.cpp
에서 선언을 변경하는 것을 잊지 경우에 당신이 그렇게 그에게 말했다 때문에, 컴파일러,
foo
의 두 가지 버전이 가정됩니다 :
//a.cpp
void foo(int); //version 1
void foo(int i) {
//do something
}
//b.cpp
void foo(); //oops. forgot to change that. compiler assumes a second version
void bar() {
foo(); //ok, try to call version 2...
}
이 컴파일, 그러나 링커는에 대해 정의되지 않은 참조 인 void foo()
에 대해 알려줄 것입니다. b.obj
.
어떤 이유로 든 제 2 접근법을 사용해야합니다. b.cpp에서 프로토 타입을 엄격하게 정의해야합니까, 아니면 b.cpp에서 프로토 타입을 사용하지 않아도됩니까? – Meluha
@SagarKotecha "프로토 타입"은 정의되지 않았습니다 *. * 선언 *입니다. * 정의 *는'a.hpp'에서 찾을 수 있습니다. 즉, 본문이있는 함수입니다. 나는 까다 롭다는 의미가 아닙니다. 그러나 적절한 용어를 사용하면 사람들은 당신이 말하는 것에 대해 더 잘 이해할 것입니다. 그리고 네, 함수를 사용하기 전에 함수를 선언해야합니다. 그러나 어떻게해야하는지 * 왜 *해야한다고 생각하는지, 즉 달성해야하는 것을 Google에 알려 주면, 헤더를 더 잘 활용하는 방법을 보여줄 수 있습니다. –
영어로 불편을 끼쳐 드려 죄송합니다. "프로토 타입 정의"에 대한 선언을 의미했습니다 (잘못된 것임). – Meluha
- 1. Libapr .so 파일에 소스 코드의 기능이 없습니다
- 2. 소스 파일이없는 헤더 파일
- 3. 각 소스 파일에 하나의 헤더 파일 포함
- 4. pcap 파일 헤더 액세스
- 5. 소스 및 헤더 파일
- 6. 헤더 파일에 소스 코드를 포함해야합니까?
- 7. 다른 헤더 파일에 헤더 포함
- 8. 컴파일러에서 소스 파일에 헤더 파일을 넣는 방법
- 9. 헤더 또는 소스 파일에 생성자가있는 구조체를 구현해야합니까?
- 10. 공통 헤더 파일의 외부 클래스 및 클래스의 헤더 파일
- 11. 헤더/소스 파일의 포함 된 파일
- 12. 하나의 헤더 파일에 공통 파일을 포함하면 어떤 이점이 있습니까?
- 13. SystemC와 Verilog 간의 공통 헤더 파일
- 14. jni의 헤더 및 소스 파일
- 15. R 소스 코드 파일에 액세스
- 16. 다른 패키지에있는 파일에 액세스
- 17. 헤더 및 소스 파일 함수 정의
- 18. 단일 소스 파일에 C++ 파일 병합
- 19. 404 기본 소스 파일에 없습니다.
- 20. C++ 용 헤더 및 소스 파일 구성
- 21. 다른 도메인에서 CSV 파일에 액세스
- 22. 내가이 PHP 컬 기능이 파일 헤더
- 23. winbio.h 헤더 파일 기능이 비활성화되어 있습니까?
- 24. Makefile의 딥 헤더 파일 정보
- 25. 동일한 소스 파일 내의 다른 .cpp의 멤버 함수에 액세스 하시겠습니까?
- 26. 다른 헤더 파일
- 27. 소스 첨부 파일에 Collections.class가 없습니다.
- 28. 다른 프로세스에서 사용 중이기 때문에 파일에 액세스 할 수 없습니다.
- 29. 다른 패키지에서 파일에 액세스
- 30. 다른 디렉토리의 파일에 액세스
예, b.cpp에 함수의 프로토 타입을 넣을 수 있습니다. 하지만 왜? –
죄송합니다. 사용하기 전에'b.cpp'의 함수를 * 선언 할 수 있음을 의미합니다. 분명한 질문은 "어떤 문제를 해결하려고합니까?" – juanchopanza
프로토 타입을 정의 해 주셔서 감사합니다. @JeremyWest이 작업을 수행 할 수 있습니다. 제 스태틱 정적 템플릿을 재사용하지 말고 재사용을 제안했습니다. 호기심은 프로토 타입없이 가능합니다. – Meluha