원인
이 오류는 클래스 생성자에 대한 빌드 스텁에서 발생합니다. 클래스의 객체가 생성될 때, 모든 멤버 변수가 초기화되어야 합니다. 즉, 컴파일러가 자동으로 초기화할 수 없는 타입의 멤버 변수의 경우 생성자에서 명시적으로 초기화를 해야합니다. 멤버 변수의 타입이 클래스일 때, 해당 클래스의 기본 생성자가 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.