C++的前瞻性声明

foward declaration in C++

本文关键字:声明 前瞻性 C++      更新时间:2023-10-16

我定义了两个头文件。

全球.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

和令牌.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中使用前向声明,但我不使用类Token的引用或指针。我在global.h中使用std::queue<Token> empty;。我认为这个语句必须需要令牌的大小。我不知道为什么它可以编译成功。这是queue的问题?

当您在token.h中包含global.h时,编译器将获得完整的信息来工作。尝试将global.h包含在另一个文件中,您将遇到编译错误:-(