| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- permutation
- 코딩
- 프로그래밍
- 구조체
- unreal
- 내가해냄
- dfs
- UE5
- 재귀함수
- 얌얌코딩
- 탐색기법
- c++자료구조
- 링크드리스트
- 언리얼
- 커스텀로그
- TPS
- 개발자
- 게임개발
- 연산자오버로딩
- C++
- 자료구조
- 게임프로그래밍
- 언리얼로그
- 미라클모닝
- 구조체포인터
- 오늘의에러
- 백준
- 코딩테스트
- 개발
- fstring
- Today
- Total
All is well
[오늘의에러/UE] fatal error C1083: 포함 파일을 열 수 없습니다. 'Character/CCharacter.h': No such file or directory (헤더 파일과 소스 파일을 한 폴더에 담았을 때 소스 파일이 헤더 파일을 인식하지 못하는 경우) 본문
[오늘의에러/UE] fatal error C1083: 포함 파일을 열 수 없습니다. 'Character/CCharacter.h': No such file or directory (헤더 파일과 소스 파일을 한 폴더에 담았을 때 소스 파일이 헤더 파일을 인식하지 못하는 경우)
D0YUN 2025. 3. 16. 15:04오늘의 에러
fatal error C1083: 포함 파일을 열 수 없습니다. 'Character/CCharacter.h': No such file or directory
클론 코딩하다가 소스 파일이 헤더 파일을 인식하지 못하는 에러를 만났다
에러 발생

언리얼에서 Player 역할을 할 `CCharacter` 파일을 생성하였다.
이때 Public, Private 폴더에 각각 헤더 파일과 소스 파일을 추가하는 것 대신 Character라는 폴더에서 한번에 관리하기 위해 Character 폴더 하위에 두 파일이 생성되도록 설정을 하였다.
같은 폴더 안에 있으면 당연하게 인식을 해야 하는데 소스 파일이 헤더 파일을 인식하지 못하여 당황스러웠다.
에러 원인
이 에러는 주로 `#include` 경로 문제에서 발생한다고 한다.
이 케이스는 Unreal Engine의 빌드 시스템이 `Character.h`와 `Character.cpp`가 들어 있는 Character 폴더의 경로를 제대로 인식하지 못해서 발생했다.
Unreal에서는 보통 `Source/프로젝트이름/` 아래 `Public`과 `Private` 폴더를 두고 관리하며, `Public`에 있는 헤더는 `#include "CCharacter.h"`처럼 단순 이름으로 접근하는 것이 일반적이다.
그런데 Character 폴더에 두 파일을 함께 담았을 경우 Unreal Engine의 Public 또는 Private 폴더 구조를 고려하지 않았기 때문에 제대로 인식하지 못하게 된다.
이를 인식시키기 위해서는 `CCharacter.h`가 있는 폴더를 `Build.cs` 파일에서 추가해서 Unreal Build System이 해당 파일을 찾을 수 있도록 해줘야 한다.
해결 방법

이 에러를 해결하려면 프로젝트의 `Build.cs` 파일에서 `PublicIncludePaths`에 올바른 헤더 경로를 추가해야 한다.
방법은 두 가지다
방법1
PublicIncludePaths.Add(ModuleDirectory);
이 방법을 이용하면 `ModuleDirectory`를 추가하여 `Source/Odyssey/` 전체를 포함할 수 있다.

- `#include "CCharacter.h"`처럼 간략한 경로로 헤더를 포함할 수 있고
- `Character` 폴더를 따로 지정하지 않아도 `ModuleDirectory` 아래에 있는 모든 헤더 파일을 검색할 수 있다.
방법2
PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "Character"));
이 방법을 사용하면 `Character` 디렉터리만 포함 경로에 추가할 수 있다.
- `Character` 폴더만 포함 경로에 추가되므로, 헤더 검색 범위를 최소화할 수 있고
- 이를 통해 빌드 속도를 조금 더 최적화할 가능성이 생긴다.
모든 C++ 파일을 Public, Private을 나누지 않고 기능 별로 묶어 한 폴더에서 관리할 예정이라 방법1을 선택하였다.
추가 개념 정리
// PublicIncludePaths
- Unreal Build System에서 헤더 파일을 검색하는 경로 목록이다.
- 여기에 추가된 경로는 다른 모듈에서도 접근할 수 있는 `Public` 헤더 파일들의 포함 경로로 사용된다.
PublicIncludePaths.Add(ModuleDirectory);
위와 같이 설정하면, ModuleDirectory 내부의 모든 폴더가 검색 경로로 추가된다.
이를 통해 `#include "파일명.h" `형식으로 간략하게 불러올 수 있다.
// ModuleDirectory
`ModuleDirectory`는 현재 모듈의 루트 디렉터리 경로를 나타내는 문자열이다.
이 프로젝트의 구조를 빌려 설명하자면
Odyssey/
├── Source/
│ ├── Odyssey/ (ModuleDirectory)
│ │ ├── Character/
│ │ │ ├── CCharacter.h
│ │ │ ├── CCharacter.cpp
`ModuleDirectory` = `"Source/Odyssey"`
`PublicIncludePaths.Add(ModuleDirectory);`를 추가하면 `Source/Odyssey/` 내부의 모든 폴더에서 헤더를 찾을 수 있다.
#include "CCharacter.h" // 정상적으로 인식 가능
