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::
。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组