繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM