원인
템플릿 함수의 빌드 스텁에서, 템플릿 인자가 불완전 타입인 경우 이 오류가 발행할 수 있습니다. 템플릿 인자가 구조체나 클래스이고 구조체나 클래스의 선언은 있지만 정의가 없는 경우 발생할 수 있습니다.
해결 방법
소스 코드에 불완전 타입이 구현되지 않은 상태라면 클래스를 구현합니다. 또는 해당 클래스가 있는 파일을 include하여 불완전 타입 문제를 해소합니다. 소스 코드를 수정할 수 없다면, 스텁 코드에 불완전 타입에 대한 정의 코드를 작성합니다. 아래 예시는 스텁 코드에 불완전 타입에 대한 정의 코드를 작성하는 예시입니다.
예시
소스 코드와 스텁 코드 예시입니다.
// 소스 코드
template < int, typename B >
class mMap {
public:
mMap() {
B b;
}
};
class Incomplete; // 전방 선언된 클래스
class mdLoadedConfig
{
public:
mdLoadedConfig();
private:
mMap<0x8100, Incomplete > m_mapConfigHDMapInfo;
};
int test(mdLoadedConfig a) {
return 0;
}
// 스텁 코드
class Incomplete {}; incomplete type error
mdLoadedConfig::mdLoadedConfig()
{
/// Stub body start
/// Stub body end
}
CT 2024.12는 불완전 타입 오류가 발생할 수 있는 빌드 스텁에 불완전 타입의 빈 구현을 제공하고 incomplete type error
를 코드에 추가합니다. 구현이 필요한 위치에 컴파일 오류를 발생시켜 가이드를 제공하고 사용자가 직접 수정할 때 도움을 줍니다.
[오류 뷰]를 확인하면 incomplete type error
의 위치에서 오류가 발생한 것을 확인할 수 있습니다.
스텁 코드에서 incomplete type error
를 지우고 불완전 타입 class Incomplete
에 대한 적절한 정의 코드를 작성합니다. 필요하다면 정의 코드에 멤버 변수와 멤버 함수를 추가합니다. 이 예제에서는 멤버 변수나 멤버 함수를 추가하지 않고 빈 정의 코드를 작성하였습니다. 테스트를 다시 실행하거나 테스트 컴파일을 사용하면 스텁의 오류가 해결된 것을 알 수 있습니다.
Need more help with this?
Don’t hesitate to contact us here.