gpt4 book ai didi

c++ - union 和类(Class)

转载 作者:行者123 更新时间:2023-11-30 05:06:25 24 4
gpt4 key购买 nike

我有很多空闲时间(圣诞节假期也快到了!)所以,我试图将我的两种爱好结合起来,视频游戏和 C++。它不是真正的视频游戏项目,只是一些使用类的控制台脚本。那么,问题来了;

#include <stdafx.h>
#include <iostream>

class m4a1 {
public:
int Damage = 12;
int Mag = 30;
};

class ak47 {
public:
int Damage = 14;
int Mag = 24;
};

union Gun_Union {
m4a1 M4A1_Union;
ak47 Ak47_Union;
};

class Player {
public:
Gun_Union Gun_Player;
int Health = 200;
};

template <typename Type>
void Shot(Type* Player_Obj) {
Player_Obj->Gun_Player->AK47_Union->Mag--;
Player_Obj->Health = Player_Obj->Health - Player_Obj->Gun_Player->AK47_Union->Damage;
}
int main() {

Player Player_Obj;
Player_Obj.Gun_Player;
Shot <Player> (&Player_Obj);
std::cout << Player_Obj.Health;
}

在第 35 行,它给了我错误Player::Player(void) 试图引用消除函数。我发现用 Player 类(第 25 行)中的任何其他类型更改 Gun_Union 不会给我错误。

我也想问一下Player_Obj.Gun_Player = Ak47_Union命令是否可行;抱歉英语不好。

最佳答案

要回答您的原始 问题,您的union 具有非平凡的成员(因为初始值设定项),但没有构造函数。您需要告诉编译器您最初想要 union 的哪些成员,因为编译器必须构造一个或另一个。这可以通过给 union 一个构造函数来实现。

然后您将混合使用 .-> 运算符。

这是一个可以编译的版本(虽然我不敢称之为“固定”):

#include <iostream>

class m4a1 {
public:
int Damage = 12;
int Mag = 30;
};

class ak47 {
public:
int Damage = 14;
int Mag = 24;
};

union Gun_Union {
m4a1 M4A1_Union;
ak47 Ak47_Union;
Gun_Union() : Ak47_Union() {} // <=== the initial state is ak47
};

class Player {
public:
union Gun_Union Gun_Player;
int Health = 200;
};

template <typename Type>
void Shot(Type* Player_Obj) {
Player_Obj->Gun_Player.Ak47_Union.Mag--;
Player_Obj->Health = Player_Obj->Health - Player_Obj->Gun_Player.Ak47_Union.Damage;
}
int main() {

Player Player_Obj;
Player_Obj.Gun_Player;
Shot <Player>(&Player_Obj);
std::cout << Player_Obj.Health;
}

关于c++ - union 和类(Class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47914347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com