2016-11-14 127 views
0

在我的utils类中,我有一个私有解决方案dir字符串 - 它在构造函数(硬编码)中设置。我有一个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编译器):

是叔他当前目录

+1

'在构造函数体的std :: string _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";