2016-11-14 17 views
0

私のutilsクラスで私はプライベート解決策の文字列を持っています - それはコンストラクタ(ハードコードされた)で設定されます。私は文字列を返すゲッター関数を持っています。別のファイルでは、私は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

'のstd ::文字列_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"; 
関連する問題