gpt4 book ai didi

c++ - 在同一编译单元的其他类函数中声明另一个类的实例

转载 作者:行者123 更新时间:2023-12-03 07:03:38 25 4
gpt4 key购买 nike

每次尝试将另一个对象Hand的实例声明为同一 header 和源文件上的另一个类的方法的参数时,都会遇到这些错误。
即使声明和实现语句相同。
错误:

Severity    Code    Description Project File    Line    Suppression State
Error (active) E0020 identifier "Hand" is undefined Risk
C:\Users\ebrah\source\repos\Risk\Risk\Risk\Cards.h 44
Severity    Code    Description Project File    Line    Suppression State Error (active)    
E0147 declaration is incompatible with "void Deck::draw(<error-type> &hand)"
(declared at line 44 of "C:\Users\ebrah\source\repos\Risk\Risk\Risk\Cards.h")
Risk C:\Users\ebrah\source\repos\Risk\Risk\Risk\Cards.cpp 186
我的代码:

在头文件中:
class Card {
private:
static unsigned int nextCardID;
unsigned int cardID;
CardType cardType;

public:
Card();
~Card();
//Card(const Card &card);
Card(CardType armyType);
CardType getArmyType() const;
void setArmyType(CardType &armytype);
int getCardID() const;
void play(list<Card*> handCards, CardType& card);
friend ostream& operator<<(ostream& strm, const Card& card);
};
class Deck{
private:
list<Card> allCards;
list<Card*> deckCards;
void generateCard(int numberOfCounteries);
public:
Deck();
~Deck();
Deck(int numberOfCounteries);
void draw(Hand& hand);
friend ostream& operator<<(ostream& strm, const Deck& deck);
list<Card> getAllCards() const;
void setAllCards(list<Card> allCards);
list<Card*> getDeckCards() const;
void setDeckCards(list<Card*> deckCards);
};
class Hand {
private:
list<Card*> handCards;
public:
Hand();
~Hand();
friend ostream& operator<<(ostream& strm, const Hand hand);
list<Card*> getHandCards() const;
void setHandCards(list<Card*> handCards);
};

在源文件中:
void Deck::draw(Hand& hand)
{

}

我也想知道如何返回对 list的引用。
谢谢。

最佳答案

您可以在Hand类的定义之前forward declare Deck:

class Hand; //<-- here

class Deck{
private:
list<Card> allCards;
list<Card*> deckCards;
void generateCard(int numberOfCounteries);
public:
Deck();
~Deck();
Deck(int numberOfCounteries);
void draw(Hand& hand);
friend ostream& operator<<(ostream& strm, const Deck& deck);
list<Card> getAllCards() const;
void setAllCards(list<Card> allCards);
list<Card*> getDeckCards() const;
void setDeckCards(list<Card*> deckCards);
};

//...
要返回对 list的引用,只需将 &添加到方法中,即:
list<Card>& getAllCards() const;
请注意,这是一个 const引用,您无法在调用方中更改 list,这是一个好习惯,如果您想访问数据而不更改它,则可以避免通过复制返回的开销。
如果您想更改 list,则需要删除 const关键字。

关于c++ - 在同一编译单元的其他类函数中声明另一个类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64221903/

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