我定义了两个头文件。
global.h
#ifndef GLOBAL_H
#define GLOBAL_H
#include <queue>
#include <string>
//#include "token.h"
class Token;
typedef std::string TokenValue;
enum TokenType{//...};
inline void clear(std::queue<Token> tokens)
{
std::queue<Token> empty;
std::swap(tokens, empty);
}
#endif // GLOBAL_H
和token.h
#ifndef TOKEN_H
#define TOKEN_H
#include "global.h"
class Token
{
public:
Token (TokenType token_type, TokenValue token_value)
{
token_type_ = token_type;
token_value_ = token_value;
}
~Token (){}
//...
private:
TokenType token_type_;
TokenValue token_value_;
};
我在global.h中使用foward声明,但我没有使用类Token的引用或指针。我在global.h中使用std::queue<Token> empty;
。我认为这个陈述必须要有Token的大小。我无法弄清楚为什么它可以编制成功。问题是queue
?
答案 0 :(得分:-2)
当您在global.h
中包含token.h
时,编译器可以使用完整的信息。尝试将global.h
包含在另一个文件中,您将遇到编译错误: - )