【问题标题】:Error after including class header file when creating function with class as argument [duplicate]创建以类作为参数的函数时包含类头文件后出错[重复]
【发布时间】:2022-12-19 21:52:38
【问题描述】:

所以我有以下代码。

卡.h

#pragma once
#include <string>
//#include "Player.h"

class Card {
protected:
    std::string name;
    int number;
    std::string description;

public:
    Card() = default;

    Card(std::string nameC, int numberC, std::string descriptionC);

    Card(const Card& card);

    void setName(std::string name);
    std::string getName();

    void setNumber(int number);
    int getNumber();

    void setDescription(std::string description);
    std::string getDescription();

    //void action(Player player);
};

和 Player.h

#pragma once

#include <vector>
#include "Card.h"

class Player {
private:
    std::string name;
    Card* firstCard;
    Card* secondCard;
    uint8_t tokens = 0;
public:
    Player() = default;

    Player(std::string name, Card* firstCard, Card* secondCard, uint8_t tokens);

    Player(const Player& player);

    ~Player();

    void setName(std::string name);
    std::string getName();

    void setFirstCard(Card* firstCard);
    Card* getFirstCard();

    void setSecondCard(Card* secondCard);
    Card* getSecondCard();

    void setToken(int tokens);
    int getToken();
};

它有效,但一旦我添加 card.cpp 或/和 player.cpp,它就会变得疯狂。我怎样才能做出无效动作(玩家玩家);功能并仍然保留我的 cpp 文件?我还应该说,在 .cpp 文件中,我只保留类标头。

【问题讨论】:

标签: c++


【解决方案1】:

如果两个标头相互包含,您将具有循环依赖性。相反,Player 可以为 Card 使用不完整的类型,因此替换

#pragma once

#include <vector>
#include "Card.h"

class Player {
...

#pragma once

#include <vector>

class Card;  // forward declaration, incomplete type

class Player {
...

那么你可以在 Card.h 中#include "Player.h"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 2017-08-20
    • 1970-01-01
    • 2017-02-25
    • 2021-10-28
    • 1970-01-01
    • 2014-10-20
    • 2014-04-14
    相关资源
    最近更新 更多