클래스 정의에서 함수의 정의는 컴파일된 이후에 링커에 의해 하나의 실행파일로 묶이기만 하면 된다.
//Car.h
#ifndef __Car_h__
#define __Car_h__
class Car {
private:
int fuelGauge;
public:
void getFuelGauge();
void setFuelGauge(int fuel);
};
#endif
//Car.cpp
#include "Car.h"
#include <iostream>
inline void Car::getFuelGauge() {
printf("now fuel : %d", this->fuelGauge);
}
inline void Car::setFuelGauge(int fuel) {
this->fuelGauge = fuel;
}
//Main.cpp
#include "Car.h"
void main() {
Car c;
c.setFuelGauge(300);
c.getFuelGauge();
return;
}
위와 같이 Car.cpp에 inline 함수를 적용할 경우 컴파일에 실패한다.
inline 함수는 컴파일 과정에서 함수의 호출 위치에 함수의 몸체 부분이 삽입되는 것이다.
즉, Main.cpp에서 get/set이 인라인 함수가 아니라면 Car 클래스의 멤버함수인지만 확인하고 컴파일은 완료된다.
그러나 인라인 함수이기 때문에, get/set은 함수 몸체로 대체되어야 한다.
//Car.h
#ifndef __Car_h__
#define __Car_h__
class Car {
private:
int fuelGauge;
public:
void getFuelGauge();
void setFuelGauge(int fuel);
};
inline void Car::getFuelGauge() {
printf("now fuel : %d", this->fuelGauge);
}
inline void Car::setFuelGauge(int fuel) {
this->fuelGauge = fuel;
}
#endif
그래서 위와 같이 클래스 선언과 동일한 파일에 함수의 몸체가 저장되어, 컴파일러가 참조할 수 있게 해야 한다.
( 컴파일러는 파일 단위로 컴파일을 한다. = Main.cpp 컴파일 과정에 Car.cpp을 참조하지 않는다. )
'Language > C,C++' 카테고리의 다른 글
C++, C# 에서 값 타입을 참조로 전달하는 방법 (0) | 2024.07.07 |
---|---|
c++ 객체 반환, 포인터 관리, 스마트 포인터 (0) | 2024.04.23 |
윈도우10 Qt6/ Qt Creator13/ Opencv4.9 연동, 설정 (0) | 2024.04.15 |
열혈 C++ 프로그래밍) Part 1 (0) | 2024.03.04 |