일단 예시부터


test.h

class cls {

int a;

public :

cls();

}


test.cpp

cls::cls() 

{ a = 100; }


main.cpp

auto main() -> int

{ cls sample; }


이건 정상적으로 코딩되는데


여기서 test.cpp에서 cls()에 inline을 붙히고 위 메인함수처럼 기본생성자로 인스턴스를 만들면

Undefined symbols for architecture x86_64:

  "__ZN3clsC1Ev", referenced from:

      __Z9print_varv in main.cpp.o

ld: symbol(s) not found for architecture x86_64

뭐 대충 이런식으로 심볼을 찾지를 못함.


웃긴건 인자를 가진 생성자나 복사, 이동 생성자등은 또 인라이닝이 되고

인라이닝된 기본생성자 함수 정의를 헤더파일로 옮겨버리거나 선언부에서 바로 정의하면 그건 또 됨.

이렇게 되는 이유가 궁금한데 관련 정보나 키워드 좀 알려줄 수 있음?