C++ 头文件 class 声明
C++ header file class declaration
所以在我的 C++ 项目中,我有我的“cards.h”和“cards.cpp”文件,并且“cards.h”文件声明了 3 个 classes:牌、牌、手
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 文件中声明的classes? C++ 是否从上到下读取文件?
- 我也不能把Cardclass放在最下面,因为Deck and Hand用的是Card
- 我必须将所有 3 个 class 放在同一个文件中,即“cards.h”文件。
你是对的。 C++ 需要声明从上到下。
附带说明 class 声明的语法不正确。每个 class 都需要在最后一个右花括号后以分号结束。我测试了你的例子,它工作正常。
您可以将 class 分成它们自己的文件并使用前向 class 声明,因为每个 class 都需要另一个。或者您可以将它们放在同一个文件中并在使用前添加前向 class 声明。如下所示。
#include <vector>
using namespace std;
class Deck;
class 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
};
所以在我的 C++ 项目中,我有我的“cards.h”和“cards.cpp”文件,并且“cards.h”文件声明了 3 个 classes:牌、牌、手
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 文件中声明的classes? C++ 是否从上到下读取文件?
- 我也不能把Cardclass放在最下面,因为Deck and Hand用的是Card
- 我必须将所有 3 个 class 放在同一个文件中,即“cards.h”文件。
你是对的。 C++ 需要声明从上到下。 附带说明 class 声明的语法不正确。每个 class 都需要在最后一个右花括号后以分号结束。我测试了你的例子,它工作正常。
您可以将 class 分成它们自己的文件并使用前向 class 声明,因为每个 class 都需要另一个。或者您可以将它们放在同一个文件中并在使用前添加前向 class 声明。如下所示。
#include <vector>
using namespace std;
class Deck;
class 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
};