필자의 메인 클래스에는 person 클래스가 있는데, 에는 Strategy 객체에 대한 포인터가 들어있다. 나는이 작업을 수행하기 위해 노력하고있어 :포인터가 초기화되지 않았습니까?
person.strategyPointer->getStrategyType()
을하지만이 밖으로 인쇄 할 때, 나는 특별한 번호를, 3435973836.이 아마 내 strategyPointer가 초기화되지 않은 것을 의미한다.
Strategy* strategyPointer;
그리고 Person.cpp 파일
내가 같이 포인터를 초기화 : 내 사람 클래스 헤더 파일에서는,이 선언합니다. 내가 널 포인터를 가리키면
Person::Person()
: strategyPointer(nullptr)
{
}
, 왜 컴파일러는 아직도이 strategyPointer 초기화하지 않는 불평한다? 아니면 을 가리키고 있기 때문에 범위를 벗어나서 삭제됩니까? 나는 실제로 구문 분석 할 때 포인터를 가리킨다. 내가 상속을 사용하고
StrategyType newStrat;
newStrat.setStrategyType(strategyType);
person.strategyPointer = &newStrat
및 전략 내 기본 클래스입니다 : 나는 같은 것을 할. 그러나, 내 메인 소스 파일에서 나중에 초기화에 대해 불평합니다. 이 초기화 문제로 계속 진행됩니다. 내가 포인터 가짜 전략 개체 중 하나를 가리킬 수 없습니다.
EDIT : 나는 사람 헤더 파일에 새 변수 선언을 추가했습니다. 전략 newStrategy; 나중에 내가 만든 StrategyType 개체를 newStrategy에 할당하고 strategyPointer를 & newStrategy로 지정합니다. 이것은 내가 범위에서 벗어나서 만든 StrategyType 객체를 방지해야합니다. 맞습니까? 하지만 내 main.cpp에서 person.stratPointer-> getStrategyType();을 출력하려고 할 때 나는 여전히 같은 값을 얻습니다. 그러나 person.newStrategy.getStrategyType()을 출력하면 원하는 값을 얻을 수 있습니다.
어떤 프로그래밍 언어처럼 대답합니까? –
정확한 오류 메시지를 게시하십시오.컴파일러는 일반적으로 초기화되지 않은 변수에 대해 불평하지 않습니다. 일반적으로 런타임 문제입니다. – Barmar
@EddieB 소스 파일의 이름이 Person.cpp라고 했으므로 C++ 태그를 추가했습니다. – Barmar