2016-11-14 3 views
0

내 utils 클래스에서 개인 솔루션 디렉토리 문자열이 있습니다.이 속성은 생성자 (하드 코드 된)에 설정됩니다. 문자열을 반환하는 getter 함수가 있습니다. 다른 파일에는 utils 인스턴스 (포인터)가 있습니다. getter 함수를 호출하면 빈 함수를 반환합니다.Getter 함수가 잘못된 값을 반환합니까?

MAIN.CPP

utils* myUtils = new utils(); 

std::cout << myUtils->getSolutionDir() + " is the current directory" << std::endl; 

delete myUtils; 

utils.hpp

public: 
    utils(); 
    ~utils(); 
    std::string getSolutionDir(); 
private: 
    std::string _solutionDir; 

utils.cpp

utils::utils() { 
    std::string _solutionDir = "C:\\Users\\user\\Documents\\Coding\\CodeBlocks\\MettaRPG"; 
} 
utils::~utils() {} 

std::string utils::getSolutionDir() { 
    return _solutionDir; 
} 

가 OUTPUT (GCC 컴파일러)

가 t 인 그는 현재 디렉토리

+1

'표준 : : 문자열 _solutionDir'는 멤버 변수를 그림자. 타입 선언을 생략하십시오. –

+0

여기에'new'와'delete'를 왜 사용합니까? 'utils myUtils;'도'delete'도하지 않아도 될 것입니다. – user463035818

+0

myUtils를 의존성 주입으로 다른 클래스에 전달하고 싶었습니다. 성능 향상에 도움이된다고 생각했습니다. – Melkor

답변

2

하는 생성자에서이 라인을 살펴 보자이 줄을 선언

std::string _solutionDir = "C:\\Users\\user\\Documents\\Coding\\CodeBlocks\\MettaRPG"; 

_solutionDir라는 이름의 지역 변수는 지정된 문자열과 동일한보다는 복용 것을 설정하는 기존 데이터 멤버는 _solutionDir이며 그 값은 변경됩니다. 이 문제를 해결하려면이 줄에서 std::string을 제거하십시오. 당신이 C++ (11) 컴파일러가있는 경우

또는, 그냥 다음과 같을 당신의 클래스를 변경하는 것이 좋습니다 : 생성자 본문에

public: 
    ~utils(); 
    std::string getSolutionDir(); 
private: 
    std::string _solutionDir = "C:\\Users\\user\\Documents\\Coding\\CodeBlocks\\MettaRPG"; 
관련 문제