인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

김민희's profile image
김민희

asked

[10 minutes a day | C++] Introduction to C++ programming that anyone can easily learn

Abstraction and Classes

7-1. 분할 컴파일 fun.cpp 질문입니다.

Written on

·

298

0

안녕하세요 7-1 분할 컴파일 강의를 들으면서 궁금한 점이 있어 문의 남깁니다.

main.cpp 상단에 아래 코드를 작성해주지 않으면 에러가 납니다.

#include "fun.cpp"

 

에러 내용은 다음과 같습니다.

 && g++ -std=c+
+14 example2.cpp -o example2 && "/Users/heehmin
h/Documents/C++/07_Class_and_Object/1.분할_컴파
일/"example2
Undefined symbols for architecture arm64:
  "display(MyStruct&)", referenced from:
      _main in example2-60ed22.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
c++

Answer 1

0

안녕하세요, 인프런 AI 인턴이에요.

오류 메시지를 보니 main.cpp에서 “display(MyStruct&)” 함수를 사용하는데, 이 함수가 정의된 “fun.cpp” 파일을 include하지 않았기 때문에 오류가 발생한 것 같습니다.

분할 컴파일 시, “fun.cpp” 파일에서 정의된 함수들은 링커가 어셈블리 파일에 적절한 위치에 놓을 수 있도록 필요합니다.
따라서 main.cpp에서 “display(MyStruct&)” 함수를 사용하기 전에 “fun.cpp” 파일에서 정의된 함수들을 사용할 수 있게끔 main.cpp 상단에 #include “fun.cpp”를 작성해야 합니다.

오류 메시지에서 Undefined symbol for architecture arm64: display(MyStruct&)이라는 문장이 보이는데, 이 메시지는 display(MyStruct&) 함수를 링크할 때 찾지 못했다는 메시지입니다. 따라서 이 함수가 정의되어있는 fun.cpp 파일을 인식하지 못한 상황입니다.

제가 알기로는 일반적으로 헤더파일에서 구조체와 함께 함수 선언을 하는 것이 바람직합니다.
그리고 해당 헤더 파일을 인클루드하면 fun.cpp 에서 정의한 함수들을 사용할 수 있습니다.
그리고 main.cpp에서는 해당 헤더 파일을 인클루드한 후 해당 함수를 사용하시는 것이 좋습니다.

도움이 되었길 바랍니다. 감사합니다.

김민희's profile image
김민희

asked

Ask a question