📌 TIL – C++ 프로젝트에서 undefined identifier 에러 원인 분석 (PotionItem)
🗓️ 날짜
2026.01.05
🧠 오늘의 주제
- C++ 컴파일 단위 개념
- identifier is undefined 에러 원인
- 헤더 include의 역할
- 협업 프로젝트에서 코드 추적 방법
❓ 문제 상황
Inventory를 초기화하는 과정에서 다음 코드에서 에러 발생:
std::make_unique<PotionItem>(PotionID::HPPotion, db_)
에러 메시지:
identifier "PotionItem" is undefined
처음에는
- 클래스가 없는 건지
- enum 문제인지
- 템플릿 문제인지
원인을 바로 파악하기 어려웠음.
🔍 원인 분석 과정
- 프로젝트 트리 확인
- PotionItem.h, PotionItem.cpp 파일이 실제로 존재함
- 즉, 클래스 자체는 정의되어 있음
- Inventory.cpp 확인
- PotionItem.h가 include 되어 있지 않음
- C++은 파일 단위 컴파일이기 때문에
- 프로젝트에 파일이 존재하는 것과
현재 cpp 파일에서 해당 타입을 아는 것은 완전히 다름 - Inventory.cpp 입장에서는 PotionItem을 전혀 모르는 상태였음
❌ 시도하면 안 되는 방법
class PotionItem;
- 전방 선언만으로는 해결되지 않음
- std::make_unique는 생성자를 호출하므로
- 클래스의 전체 정의가 반드시 필요
✅ 해결 방법
Inventory.cpp 상단에 헤더 추가:
#include "PotionItem.h"
이후 에러 정상 해결
📌 추가로 알게 된 점
1️⃣ make_unique<T>는 타입의 전체 정의가 필요하다
- 포인터 선언과 다르게 생성자 호출이 포함됨
2️⃣ “프로젝트에 파일이 있다” ≠ “컴파일러가 안다”
- 각 cpp 파일은 자기 include 목록만 신뢰함
3️⃣ 협업 프로젝트에서는
- 코드가 이해 안 될 때
- main → 호출 흐름 → include 구조
순서로 분석하는 게 가장 빠름
✨ 느낀 점
여러 사람이 만든 코드를 보면서 "왜 이렇게 짰는지 모르겠다"는 느낌이 들었지만,
파일 구조와 include 관계를 차근차근 따라가니 컴파일러 관점에서 문제가 명확해졌다.
앞으로는 에러가 나면 "클래스 존재 여부 → include 여부 → 생성자 요구사항"이 순서로 확인해야겠다.
'TIL' 카테고리의 다른 글
| Team7_KPT회고록 (0) | 2026.01.07 |
|---|---|
| 26.01.06_TIL (0) | 2026.01.06 |
| 26.01.02_TIL (0) | 2026.01.02 |
| 25.12.31_TIL (0) | 2025.12.31 |
| 25.12.30_TIL (0) | 2025.12.30 |
