Почему моя функция возвращает пустую строку? - PullRequest
1 голос
/ 16 марта 2020

Мне было интересно, может кто-нибудь подсказать мне, почему приведенный ниже код не ведет себя так, как я ожидаю. Под этим я подразумеваю, что я ожидаю, что строка

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;
}

Кстати, я искал похожие вопросы, но все они были немного сложнее, чем мои. Я чувствую, что здесь происходит очень базовое c недоразумение.

1 Ответ

4 голосов
/ 16 марта 2020

В Engine::Engine() вы создаете два локальных объекта с именами m_Description и m_Description2, которые не имеют ничего общего с элементами данных с одинаковыми именами; они скрывают имена членов данных.

Вам нужно назначить их как

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

или initialize их как

Engine::Engine() : m_Description("Desc1"), m_Description2("Desc2")
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...