c++ - 尝试将 Struct 指针传递给类时出错

标签 c++

我正在开发一款游戏,我目前正在尝试制作一个玩家结构来存储玩家信息,例如姓名。我想在我的 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/

相关文章:

c# - C# 是适用于大型项目的可行语言吗?

c++ - ifstream 在 C++ 中的位置

c++ - 在 C++ 标准中哪里说必须初始化 const 内置类型变量的定义?

c++ - C++ 中的类成员隐私和 header

c++ - 如何在初始化时使用可变参数来在初始化时包括不同数量的对象?

java - C++ - 替代 Integer.parseInt() 和 String.valueOf()

c++ - 在 C++14 中将模板变量传递给模板函数

c++ - c++ sfml mp3音乐播放器错误

c++ - 是否可以从函数中获取 sizeof?

c++ - Mat.inv() 在 opencv 中产生全零