【发布时间】:2021-11-24 01:03:58
【问题描述】:
所以在我的 C++ 项目中,我有“cards.h”和“cards.cpp”文件,“cards.h”文件声明了 3 个类:Card、Deck、Hand
class Card {
private:
// some private attributes
public:
// some public methods
//.....
void play(Deck& deck, Hand& hand); // This method plays the card, removes it from the hand, and places it in the deck
}
class Deck {
private:
vector<Card> deckCards;
public:
// some public methods
}
class Hand {
private:
vector<Card> handCards;
public:
// some public methods
}
编译器在“Deck”和“Hand”的播放方法中给我一个错误,错误“Unknown type name Deck”,“Unknown type name Hand”。它怎么看不到在同一个 .h 文件中声明的类? C++会从上到下读取文件吗?
- 我也不能把 Card 类放在底部,因为 Deck 和 Hand 使用 Card
- 我必须将所有 3 个类放在同一个文件中,即“cards.h”文件中。
【问题讨论】:
-
您是否对标题中
Card下面列出的 2 个类使用前向声明? -
C++ 被指定为允许single-pass compilation,因此几乎所有内容都按照在文件中的顺序读取和处理。
play、Deck和Hand可能没有被声明,因为它们在文件的后面。由于play需要引用,因此您应该能够按照@drescherjm 的建议使用前向声明来解决此问题。如果这不起作用,您必须扩展问题以包含minimal reproducible example,以便我们可以准确地看到您所做的事情。 -
@drescherjm 不,我不是,我使用它并且它有效。不过这会给我带来一些问题吗?
-
@user4581301 感谢您的详细解释,前向声明工作正常
-
这并没有解决问题,但
Card不应该知道Deck或Hand,而且他们都不应该重新安排牌组或手牌。那是另一门课,可能是Game。
标签: c++ visual-c++ clion