원인

이 오류는 클래스 생성자에 대한 빌드 스텁에서 발생합니다. 클래스의 객체가 생성될 때, 모든 멤버 변수가 초기화되어야 합니다. 즉, 컴파일러가 자동으로 초기화할 수 없는 타입의 멤버 변수의 경우 생성자에서 명시적으로 초기화를 해야합니다. 멤버 변수의 타입이 클래스일 때, 해당 클래스의 기본 생성자가 public이 아닌 경우 컴파일러는 멤버 변수를 자동으로 초기화할 수 없습니다. 생성자 코드에서 멤버 변수의 초기화 코드를 잘못 입력하는 경우, 컴파일 오류가 발생할 수 있습니다.

해결 방법

소스 코드를 참고하여 멤버 변수에 대한 적절한 초기화 코드를 빌드 스텁에 추가하여 해결할 수 있습니다. 타입 구조가 복잡한 경우, 아래 예시처럼 연관된 타입을 모두 확인하여 적절한 초기화 코드를 작성하여야 합니다. CT 2024.12의 [스텁 문제 해결 가이드] 대화 상자에서 초기화 코드를 작성할 때 참고할 수 있는 코드의 위치를 표시해줍니다. 이 위치를 참고하면 문제 해결에 도움이 될 수 있습니다.

예시

소스 코드와 스텁 코드의 예시입니다.

// 소스 코드
class Config {
public:
    Config() = delete;
    Config(int option1, int option2) {}
};

class Processor {
public:
    Processor() = delete;
    Processor(Config config) {}
};

class System {
public:
    System(int kind);
private:
    Processor processor1;
    Processor processor2;
};

void test(System system) {
}
// 스텁 코드
System::System(int kind):
  processor1(Processor()),
  processor2(Processor())
{
/// Stub body start

/// Stub body end
}

[오류 뷰]를 확인하면 멤버 변수 processor1, processor2의 초기화 코드가 잘못되었다는 것을 알 수 있습니다.

멤버 변수 processor1를 올바르게 초기화하기 위해 processor1의 타입인 Processor 클래스의 생성자 Processor(Config config)를 확인합니다. Processor 클래스의 객체를 생성할 때, Config 클래스의 객체가 필요합니다. Config 클래스의 객체를 생성하기 위해 Config 클래스의 생성자 Config(int option1, int option2)를 확인합니다. Config 클래스의 객체는 int 타입 두 개를 매개변수로 받아 생성됩니다. Processor 클래스의 생성자와 Config 클래스의 생성자를 참고하여 processor1의 초기화 코드를 다음과 같이 작성합니다.

processor1(Processor(Config(1, 2)))  // 매개 변수의 값은 테스트 설계에 맞게 적절히 입력하세요.

멤버 변수@processor2@의 타입도 processor1과 같으므로 processor1과 동일한 형태로 초기화해줍니다. 이를 적용하여 새로 작성된 스텁 코드입니다.

// 수정된 스텁 코드
System::System(int kind):
  processor1(Processor(Config(1, 2))),    // 매개 변수의 값은 테스트 설계에 맞게 적절히 입력하세요.
  processor2(Processor(Config(3, 4)))     // 매개 변수의 값은 테스트 설계에 맞게 적절히 입력하세요.
{
/// Stub body start

/// Stub body end
}

테스트를 다시 실행하거나 테스트 컴파일을 사용하면 스텁의 오류가 해결된 것을 알 수 있습니다.

Need more help with this?
Don’t hesitate to contact us here.

Thanks for your feedback.