对象为空,在调用函数中使用指针作为参数
object empty inside calling function using pointer as argument
我正在用指针学习C++并尝试编写一个小游戏。我有一个类玩家管理器,它应该创建玩家并将它们保存在文件中。 代码可以编译,但是当我调用方法savePlayer时,方法中的指针是有效的,但我无法访问指针指向的对象。
我在互联网上搜索过类似的问题,但没有找到类似的东西。我可能没有寻找正确的关键字,因为我不知道这是从哪里来的。 我在调用函数并且指针工作之前进行了检查,我可以访问该对象。 在调用函数中,指针仍然具有正确的地址,但我无法访问该对象。不返回任何内容。 在调用函数之后,指针仍然有效,并且对象可访问。(请参阅下面代码中的//注释)
以下是我在 PlayerManager 类中的两个函数。
void PlayerManager::createPlayer()
{
Player *playerPtr = new Player();
std::string name;
std::cout << "Name: ";
std::cin >> name; // I entered for instance John
std::cout << std::endl;
playerPtr->setName(name);
std::cout << "PlayerPtr name before savePlayer: " << playerPtr->getName() << std::endl; // Outputs John
std::cout << "playerPtr before savePlayer: " << playerPtr << std::endl; // Ouputs the address
this->savePlayer(playerPtr);
std::cout << "PlayerPtr name after savePlayer but inside createPlayer: " << playerPtr->getName() << std::endl; // Outputs: John
delete playerPtr;
}
void PlayerManager::savePlayer(Player* playerPtr) // the called method
{
std::cout << "playerPtr inside savePlayer: " << playerPtr << std::endl; // Outputs the address
std::cout << "PlayerPtr name inside savePlayer: " << playerPtr->getName() << std::endl; // Outputs nothing
std::string const fileName = "Players/"+playerPtr->getName()+".txt";
std::cout << fileName << std::endl; // Outputs Players/.txt
std::ofstream myFile = std::ofstream(fileName.c_str());
if(myFile)
{
std::cout << "Enregistrement du nouveau joueur." << std::endl; // The code launches but no file is created.
myFile << "{"<< std::endl;
myFile << "name: " + playerPtr->getName() <<std::endl;
} else {
std::cout << "Erreur d'enregistrement du fichier." << std::endl;
}
}
我希望能够通过传递指针来访问在 savePlayer 方法内的 createPlayer 方法中创建的对象,但我只得到一个空字符串
playerPtr->getName()
我不明白如何在调用方法之前和之后访问该对象,但不能在内部访问,因为地址仍然有效。
编辑1感谢您引导我解决明显的错误! 由于代码:块的崩溃,我的getName()方法在保存之前被删除了,我没有考虑检查它。通过编写以下 getName() 它起作用了:
std::string Player::getName() const
{
return m_name;
}
然而,我不明白为什么以及如何在 createPlayer() 中获得输出,尽管方法 getName() 为空。这正常吗?
编辑 2我将为这种奇怪的行为创建一个新问题。
您拥有的代码应该可以正常工作。我唯一的猜测是你的 getter 函数getName()
有些可疑.
我想你有这方面的东西吧?
const std::string &getName() const
{
return name;
}
在线代码示例:https://rextester.com/INHG32142
相关文章:
- 为函数定义符号不明确的指针参数
- 构造函数 (C++) 中的 char 指针参数存在问题
- 按引用调用与按指针参数调用的差异 前递增和后递增
- 为什么具有指针参数的成员函数需要指向指针的指针?
- 通过引用函数传递指针参数是什么意思?
- 从double到double*的指针参数
- void 函数中的指针参数返回不一致的值
- 无法向上转换指针到指针参数
- 将数组动态分配到具有指针参数的函数中
- 模板函数指针参数与构造函数参数
- 使用通用函数指针参数化函数模板的简洁方法
- 如何为C++字符串分配空指针参数?
- C++带有指针参数的函数
- 指针参数的默认值
- 将常量添加到函数模板指针参数
- 如何传递unique_ptr<T>代替原始*输出*指针参数?
- 不带星号的函数指针参数
- 功能指针参数参数转换为const
- 将指针参数传递给双指针参数
- 如何调试指针参数是否通过函数修改