我想知道是否有人可以向我说明为什么下面的代码不符合我的预期。我的意思是我期望这行
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;
}
通过我搜索类似问题的方式,但是它们都比我的复杂。我觉得我在这里有一个非常基本的误解。
答案 0 :(得分:4)
在Engine::Engine()
中,您将创建两个名为m_Description
和m_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")
{
}