![](/img/trans.png)
[英]Passing private static array as an argument to public member function in c++?
[英]C++ not allowing me to use a private member variable in a public function
我正在尝试用 C++ 开发游戏。 出于某种原因,我无法访问和更新其他变量作为类的成员公共函数中私有成员变量的值。 为什么会这样? 提到的变量是以m_
为前缀的变量。 这是 C++ 中不允许的东西吗? 我以为这是允许的!
播放器.cpp
#include "Player.h"
#include "lib/json.hpp"
using namespace std;
void Player::createPlayer(std::string name, std::string playerFilePath)
{
m_name = name;
m_playerFilePath = playerFilePath;
json j;
j["name"] = m_name;
j["health"] = 100;
j["levelOn"] = 1;
j["damageDone"] = 10;
std::string dataString = j.dump();
std::string filename = playerFilePath + m_name + ".json";
std::ofstream out(filename);
out << dataString;
out.close();
cout << "Savegame file " << filename << " created" << endl;
}
void Player::loadPlayerData(std::string playerFilePath)
{
std::ifstream t(playerFilePath);
std::string str ((std::istreambuf_iterator<char>(t)),
std::istreambuf_iterator<char>());
auto j = json::parse(str);
m_name = j["name"];
m_health = j["health"];
m_levelOn = j["levelOn"];
m_damageDone = j["damageDone"];
cout << "Player data loaded" << endl;
}
void Player::levelUp()
{
m_levelOn++;
m_health += 10;
m_damageDone += 5;
}
void savePlayerData()
{
std::ifstream t(m_playerFilePath);
std::string str ((std::istreambuf_iterator<char>(t)),
std::istreambuf_iterator<char>());
auto j = json::parse(str);
j["name"] = m_name;
j["health"] = m_health;
j["levelOn"] = m_levelOn;
j["damageDone"] = m_damageDone;
std::string stringToWrite = j.dump();
std::string filename = m_playerFilePath + m_name + ".json";
std::ofstream out(filename);
out << stringToWrite;
out.close();
cout << "Game saved" << endl;
}
播放器.h
#pragma once
#ifndef PLAYER_H
#define PLAYER_H
#include <fstream>
#include "Enemy.h"
#include <iostream>
#include <streambuf>
#include "lib/json.hpp"
using json = nlohmann::json;
class Player {
private:
int m_health;
int m_damageDone;
int m_levelOn;
std::string m_playerFilePath;
std::string m_name;
public:
void createPlayer(std::string name, std::string playerFilePath);
void dealDamage();
void takeDamage();
void levelUp();
std::string getPlayerFilePath();
void loadPlayerData(std::string playerFilePath);
void savePlayerData();
};
#endif
g++ 错误信息
Player.cpp: In function ‘void savePlayerData()’:
Player.cpp:53:21: error: ‘m_playerFilePath’ was not declared in this scope
std::ifstream t(m_playerFilePath);
^
Player.cpp:59:17: error: ‘m_name’ was not declared in this scope
j["name"] = m_name;
^
Player.cpp:60:19: error: ‘m_health’ was not declared in this scope
j["health"] = m_health;
^
Player.cpp:61:20: error: ‘m_levelOn’ was not declared in this scope
j["levelOn"] = m_levelOn;
^
Player.cpp:62:23: error: ‘m_damageDone’ was not declared in this scope
j["damageDone"] = m_damageDone;
^
Player.cpp:66:28: error: ‘m_playerFilePath’ was not declared in this scope
std::string filename = m_playerFilePath + m_name + ".json";
函数savePlayerData
不属于Player
类。 在您的savePlayerData
函数之前插入Player::
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.