我正在开发一款游戏,我目前正在尝试制作一个玩家结构来存储玩家信息,例如姓名。我想在我的 main.cpp 中创建一个类来划分代码段以获得更清晰的代码。
我有我的结构:
//in main.cpp
#include "player.h"
class MyClass player
struct _Player {
std::string name;
int hp;
int mana;
int def;
int mana_regen;
int hp_regen;
} player1;
void playerinfo2(_Player *playerx) {
playerx->name = "test2";
}
int main() {
player1.name = "test1";
std::cout << player1.name << std::endl;
playerinfo2(&player1);
std::cout << player1.name;
player.playerinfo(&player1);
}
此代码正在运行并将 player1 的名称从“test1”更改为“test2”。
//in player.h
class MyClass {
struct _Player {
std::string name;
int hp;
int mana;
int def;
int mana_regen;
int hp_regen;
};
public:
void player_update();
void playerinfo(_Player *self);
private:
};
我不知道该结构是否需要同时存在于 header 和 .cpp 文件中,但如果我不这样做,它会显示“unknown _Player”。
//in player.cpp
#include "player.h"
struct _Player {
std::string name;
int hp;
int mana;
int def;
int mana_regen;
int hp_regen;
};
void Player::player_update() {
playery.mana = playery.mana + playery.mana_regen;
}
void Player::playerinfo(_Player *self) {
self->name = "test3";
}
在控制台 g++ main.cpp player.cpp -o test.exe 中运行时,我收到错误消息:
main.cpp: In function 'int main()':
main.cpp:29:29: error: no matching function for call to 'Player::playerinfo(_Player*)'
test.playerinfo(&player1);
^
In file included from main.cpp:4:0:
player.h:21:6: note: candidate: void Player::playerinfo(Player::_Player*)
void playerinfo(_Player *self);
^~~~~~~~~~
player.h:21:6: note: no known conversion for argument 1 from '_Player*' to 'Player::_Player*'
有什么方法可以像我在 main.cpp 中的函数那样将我的 player1 传递给类吗?
最佳答案
不需要,您只需在头文件(比如 player.h)中定义一次类,并在所有类文件中使用 #include player.h
。如果你有播放器类的任何功能,这是一个惯例,你在头文件中声明它们并在 .cpp
文件中定义它们。您也可以在头文件中声明和定义它们,避免使用 .cpp
文件,但这会导致代码困惑。
关于c++ - 尝试将 Struct 指针传递给类时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55747887/