📌 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 문제인지
  • 템플릿 문제인지
    원인을 바로 파악하기 어려웠음.

🔍 원인 분석 과정

  1. 프로젝트 트리 확인
    • PotionItem.h, PotionItem.cpp 파일이 실제로 존재함
    • 즉, 클래스 자체는 정의되어 있음
  2. Inventory.cpp 확인
    • PotionItem.h가 include 되어 있지 않음
  3. C++은 파일 단위 컴파일이기 때문에
  4. 프로젝트에 파일이 존재하는 것과
    현재 cpp 파일에서 해당 타입을 아는 것은 완전히 다름
  5. 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