为什么我的函数返回一个空字符串?

时间:2020-03-16 07:50:00

标签: c++ string

我想知道是否有人可以向我说明为什么下面的代码不符合我的预期。我的意思是我期望这行

std::cout << myEngine.getDesc() << std::endl;

打印:“ Desc1”

但是我得到一个空字符串?我认为这可能是因为我将基本代码错误地分割到了不同的文件中,但是当我将所有代码放入一个文件中时,我得到了同样的结果。

StringErrorTest.cpp

#include <iostream>
#include "Engine.h"


int main()
{
    std::cout << "Compiling & Running!";
    Engine myEngine;
    std::string t1 = "Hello ";
    std::cout << myEngine.getDesc() << std::endl;
    std::cout << t1 << std::endl;
    return 0;
}

Engine.h

#include <string>

class Engine {
private:
    std::string m_Description;
    std::string m_Description2;

public:
    Engine();
    std::string getDesc();
    void setDesc(std::string desc);
    std::string getDesc2();
    void setDesc2(std::string desc2);
    std::string spitItOut();

};

Engine.cpp

#include "Engine.h"

Engine::Engine()
{
    std::string m_Description = "Desc1";
    std::string m_Description2 = "Desc2";
}

std::string Engine::getDesc()
{
    return m_Description;
}

std::string Engine::getDesc2()
{
    return m_Description2;
}

通过我搜索类似问题的方式,但是它们都比我的复杂。我觉得我在这里有一个非常基本的误解。

1 个答案:

答案 0 :(得分:4)

Engine::Engine()中,您将创建两个名为m_Descriptionm_Description2的本地对象,它们与具有相同名称的数据成员无关。它们隐藏数据成员的名称。

您想要的是将它们分配

Engine::Engine()
{
    m_Description = "Desc1";  // or this->m_Description = "Desc1"
    m_Description2 = "Desc2"; // or this->m_Description2 = "Desc2"
}

将其初始化为

Engine::Engine() : m_Description("Desc1"), m_Description2("Desc2")
{
}