这是一个简单的游戏,我正在尝试学习如何在现有项目中应用C ++(这是我最好的学习方式),我有使用C#和其他高级语言编程的经验,所以它很我还是新来的。所以我有这个种族名单:
const char* Races[] = {
"Demon",
"Human",
"Elf",
"Orc",
"Aliens"
};
有一次我收到了用户的注册并选择了比赛。我将用户的所有信息保存到结构中,我也希望将比赛的全名保存到此结构中。
struct User_t {
unsigned int RaceID;
char Race[16];
};
以下代码是我将值放在struct中的代码:
User_t User;
User.RaceID = 3;
strcpy(User.Race, Races[User.RaceID]);
然而,这不起作用。这是游戏的一部分,异常处理非常糟糕(它基本上会在没有任何错误可见的情况下崩溃游戏)。我想弄清楚我做错了什么。任何建议,也许是关于其他事情的建议?
答案 0 :(得分:5)
我想知道我做错了什么。任何建议,也许是关于其他事情的建议?
您正在尝试使用C ++,就好像它是C语言(这在语法上是可能的),并且您不能很好地了解C和C ++。
帮自己一个忙,并在真正的 C ++中做到:
std::string Races[] = {
"Demon",
"Human",
"Elf",
"Orc",
"Aliens"
};
struct User {
unsigned int RaceID;
std::string Race;
explicit User(unsigned int rid)
: RaceID(rid)
, Race(Races[rid])
{}
};
User user(3);
std::cout << user.Race << '\n';
答案 1 :(得分:0)
我建议您浏览enum class{}
。使您的代码不易出错更容易。
您可以这样编写代码:
enum class eRaces
{
eDemon,
eHuman,
eElf,
eOrc,
eAlien,
};
struct User
{
eRaces myRace;
};
User User;
User.myRace = eRaces::eElf;
答案 2 :(得分:-1)
假设Races
数组的范围是全局的,您可以简单地避免复制它,只需执行以下操作:
struct User_t {
unsigned int RaceID;
const char* Race;
};
User_t User;
User.RaceID = 3;
User.Race = Races[User.RaceID];
您也可以使用评论中提到的std::string
,但您不会避免复制它。自从开发游戏以来,我认为性能优先于c ++语言的客观性。