C++不允许我在公共函数中使用私有成员变量

C++ not allowing me to use a private member variable in a public function

本文关键字:变量 成员 函数 允许我 不允许 C++      更新时间:2023-10-16

我正在尝试用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::