Log*_*ing -1 c++ struct casting
我有一个游戏,我想计算一个玩摇滚纸剪刀的玩家对计算机的输赢(C++的随机数函数).为了跟踪玩家的胜利,损失以及与计算机的关系,我创建了这个结构(这是全局的):
struct human{
short wins = 0;
short losses = 0;
short ties = 0;
};
Run Code Online (Sandbox Code Playgroud)
当我尝试使用short结构中的一个变量进行数学运算时会出现问题:
int main(){
short totalPlays = 1;
float winsPerc;
outcome(totalPlays, winsPerc);
}
void outcome(short totalPlays, float& winsPerc){
winsPerc = (static_cast<float>(human.wins) / static_cast<float>(totalPlays))* 100;
}
Run Code Online (Sandbox Code Playgroud)
在这两个函数中,我试图计算玩家获胜的百分比.但是,我的编译器似乎human将human.wins变量的一部分解释为一个类型.所以当然我试图改变human.wins到short human.wins无济于事.之后,编译器只表示类型short是意外的.由于这是如此模糊,我真的不知道我做错了什么.任何帮助将非常感谢!
你误解了struct是什么.您将自己struct human视为一个对象,您可以使用可以执行操作的数据,但事实并非如此; 这是一种类型,就像一个类.事实上,它是一个阶级.
short在其成员的话语之前随机添加关键字不会完成任何事情!(你的"当然"条款是荒谬的,我很害怕.)
您必须先实例化该类型,然后才能使用它.在你的情况下,有一个简单的速记:
struct {
short wins = 0;
short losses = 0;
short ties = 0;
} human;
Run Code Online (Sandbox Code Playgroud)
现在这是一个未命名的struct类型定义,立即实例化为human.
可能导致您混淆的一点是使用另一种简写:那些内联成员初始化者(在少数几年中只有有效的语法).他们说,只要这种类型的对象被实例化,它的所有成员都将被初始化为0.如果您的代码看起来像这样可能更明显:
struct human_t {
short wins;
short losses;
short ties;
};
human_t human = {0, 0, 0};
Run Code Online (Sandbox Code Playgroud)
虽然前面的例子可能很好,只要你的观众理解现代C++.