- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我和我的 friend 正在一起学习 C++,我们有一个问题。我们已经创建了一个头文件,其中包含一个使用静态变量和静态函数的类,这些函数和变量需要总共 2+ 个 .cpp 文件才能访问,但是因为我们正在初始化头文件中的静态变量,所以头文件可以只能读取一次(由于静态变量初始化)。
我们已尝试仅在 MainFunction.cpp 文件中包含头文件,但如果这样做,其他 .cpp 文件将无法使用静态变量和函数。在(当前)两个需要函数/变量的 .cpp 文件中包含头文件会导致大量链接错误,因为静态变量被多次初始化。
这是包含类和静态变量初始化的头文件:
//PlayerStatistics.h
// Classes
class PlayerStatistics
{
public:
// Functions To Change Player Statistics
static void SetStats(short int HitPoints, short int MagickaPoints, short int Fatigue, short int Damage, short int Defense, short int Dodge, short int Block, short int SpellCastChance);
static void SetLevel(short int Experience, short int Level);
static void SetExperience(short int Experience);
// Player Statistics
static short int HitPoints;
static short int MagickaPoints;
static short int Fatigue;
static short int Damage;
static short int Defense;
// Chance Based System Player Statistics (Relies on Fatigue Level)
static short int Dodge;
static short int Block;
static short int SpellCastChance;
static short int Experience;
static short int Level;
};
// STATIC VARIABLES
short int PlayerStatistics::HitPoints = 20;
short int PlayerStatistics::MagickaPoints = 20;
short int PlayerStatistics::Fatigue = 20;
short int PlayerStatistics::Damage = 20;
short int PlayerStatistics::Defense = 20;
short int PlayerStatistics::Dodge = 20;
short int PlayerStatistics::Block = 20;
short int PlayerStatistics::SpellCastChance = 20;
short int PlayerStatistics::Experience = 0;
short int PlayerStatistics::Level = 1;
以及需要访问的 2 个 .cpp 文件:
//PlayerCharcter.cpp
void PlayerStatistics::SetLevel(short int Experience, short int Level)
{
Experience = Experience;
Level = Level;
}
void PlayerStatistics::SetStats(short int HitPoints, short int MagickaPoints, short int Fatigue, short int Damage, short int Defense, short int Dodge, short int Block, short int SpellCastChance)
{
HitPoints = HitPoints;
MagickaPoints = MagickaPoints;
Fatigue = Fatigue;
Damage = Damage;
Defense = Defense;
Dodge = Dodge;
Block = Block;
SpellCastChance = SpellCastChance;
}
void PlayerStatistics::SetExperience(short int Experience)
{
Experience = PlayerStatistics::Experience;
}
void AddExperience()
{
// This is a Testing Function to test the Level Up system and should be removed once Creatures
// are added to the game, or it can be edited to include proper experience points given for
// killing curtain enemies.
short int GetExperienceNumber;
std::cout << "How many experience points do you want? \n";
std::cin >> GetExperienceNumber;
PlayerStatistics::Experience = (PlayerStatistics::Experience += GetExperienceNumber);
std::cout << GetExperienceNumber << " Experience Points Added! \n \n \n \n \n";
}
//WordBank.cpp
std::cout << "\n \n \n \n \n \n \n \n \n \n \n \n"
<< PlayerName << "'s Character Sheat! \n \n \n"
<< "Level: " << PlayerStatistics::Level << "\n"
<< "Experience: " << PlayerStatistics::Experience << "\n \n \n"
<< "Health: " << PlayerStatistics::HitPoints << "\n"
<< "Magicka: " << PlayerStatistics::MagickaPoints << "\n"
<< "Fatigue: " << PlayerStatistics::Fatigue << "\n"
<< "Attack: " << PlayerStatistics::Damage << "\n"
<< "Defense: " << PlayerStatistics::Defense << "\n"
<< "Dodge Skill: " << PlayerStatistics::Dodge << "\n"
<< "Block Skill: " << PlayerStatistics::Block << "\n"
<< "Spell Casting Skill: " << PlayerStatistics::SpellCastChance << "\n"
<< "\n \n \n \n \n \n \n" << "To Continue Type Any Key In And Hit Enter" << std::endl;
我们需要在这 2 个 .cpp 文件中 #include 这个头文件(还有 2 个计划也需要访问这个类)但实际上只读取一次头文件(这样我们就可以避免读取静态变量初始化不止一次)。我们正试图避开构造函数(主要是为了便于使用静力学,也为了我们的学习目的)。我们已经阅读了有关 Header Guards 的信息,但我们无法弄清楚如何让它们解决这个问题。
我们将不胜感激您的任何提示/建议!
最佳答案
你应该只在你的头文件中声明变量(那些应该是外部的,而不是静态的,全局变量,或者带有外部链接的静态成员变量)。因此,请保持静态成员变量声明(在您的 PlayerStatistics.h
头文件中)
class PlayerStatistics {
/// ....
static short int HitPoints;
};
(是一个带有外部链接的静态成员变量声明)
然后你可以像这样定义
short int PlayerStatistics::HitPoints = 20;
short int PlayerStatistics::MagickaPoints = 20;
short int PlayerStatistics::Fatigue = 20;
在一个单独的实现文件中(通常通常是包含 main
的文件,例如一些 main.cpp
)。
你可能应该输入 include guards在您的头文件中,它以
开头#ifndef PLAYER_STATISTICS_INCLUDED
#define PLAYER_STATISTICS_INCLUDED
以
结尾#endif /*PLAYER_STATISTICS_INCLUDED*/
我强烈建议您研究一些现有的 C++ 免费软件应用程序的源代码(例如来自 http://freecode.com/ 或其他免费软件集合)。这会教给你很多东西。
关于C++ 通过跨多个 .cpp 文件所需的信息一次性读取一个头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12453118/
我无法理解 XmlWriter 在 C# 中的工作方式。假设以下代码在某处使用过。 StringBuilder builder = new StringBuilder(); XmlWriterSett
两者的主要区别是什么 一次性 一次性观察者 复合 Material 一次性 何时使用它们中的每一个 最佳答案 Disposable 是可以取消的作业。CompositeDisposable 是一个父作
我使用 QML 列布局,但我只想禁用(或减少)两个元素之间的间距。其余之间的间距应单独保留。 这可能吗? 谢谢。 最佳答案 减少是困难的,但增加两个相邻项之间的间距很容易:只需在它们之间插入一个空的
我有一个“设置” View 和关联的 Controller ,在从源代码管理克隆站点后,我立即使用它们来配置 MVC 站点的数据库和 web.config。 运行一次后,我想防止“设置” Contro
我正在尝试从 Peter Seibel 的《Practical Common Lisp》一书中学习 Lisp。在 chapter 8 : "Macros: Defining your own" ,我遇
我正在实现一个从 Resource 发出行的可观察对象. 问题是这个资源真的不喜欢从创建它的不同线程关闭(它会杀死一只小狗并在发生这种情况时抛出异常)。 当我处理订阅时,资源 Cancellable/
假设我使用以下命令启动了一次性流程:heroku run:detached "node do-some-stuff.js" --app my-app命令的输出是这样的: /usr/local/hero
是否可以识别正在运行一次性 dyno(即 heroku run rails console)的用户(可能通过 Heroku 电子邮件)?用例自动将更改归因于该用户。 最佳答案 我认为这是不可能的,因为
前一段时间我使用 setup_environ() 编写了一个从命令行运行的一次性 python 脚本,它不太适合作为自定义 manage.py 命令(我的首选)。它很好地设置了一切。我假设我们弃用了这
当我使用 RXJava 1 时,我总是跟踪我的订阅以在 onDestroy Activity 中执行取消订阅。示例:https://medium.com/@scanarch/how-to-leak-m
在较旧的 MVC HTML 帮助程序中,可以使用 IDisposable 来包装内容 - 例如 BeginForm 帮助程序会自动包装 *stuff*带有结束 form 标记 *stuff*
我想使用 System.Threading.Timer 执行一次。该计时器应该在不再需要时(即回调触发时)通过调用 Dispose 来确定性地清理。 问题在于回调无法可靠地获取对 Timer 的引用!
我是 Angular 1.5 的新手,正在学习单向数据流的最佳实践。我要离开这个 jsfiddle,我真的很困惑特别是一种行为。 我理解数据从父级向下流向子级并且是单向绑定(bind)的,即子级的变化
我正在尝试抓取一个使用大量 ajax 效果在表格中显示数据的网站。 当您与网站交互时,会通过 JSON 返回一些数据。 我知道 URL 以及如何构造它,但如果我尝试重新请求此 JSON,服务器会返回
是否可以在一次性级触发模式下使用epoll? 当我搜索时,我找不到任何关于它的信息;好像大家都用边沿触发的方式。 最佳答案 When the EPOLLONESHOT flag is selected
在阅读了我能找到的关于延续的几乎所有内容后,我仍然无法理解它们。也许是因为所有的解释都与 lambda 演算密切相关,我很难理解。 通常,在您完成当前的事情(即计算的其余部分)之后,continuat
我有一个 block 的自定义实现,它的工作方式很像 Html.BeginForm() .实现基本如下: public class MyBlock : IDisposable { privat
我们有一个广泛的经典 ASP 站点,我们正在寻求升级到 ASP .Net(很可能是最新版本)。显然,一次升级所有页面将是一项艰巨的任务,因此我们一开始只希望在 ASP .Net 中编写新页面(和页面重
我有一个 Django 和 django 休息框架项目,我希望移动设备能够请求 token ,然后在断开连接之前使用该 token x 分钟。我不想为每个移动设备创建一个用户,我只想要一个一次性密码。
我正在通过 Forte.js 集成 ACH eCheck 付款。 文档说第一步是获取一次性安全 token ,我就是这样做的,使用 forte.js . 那么我应该将此 token 用于 REST A
我是一名优秀的程序员,十分优秀!