C ++中的前向声明

时间:2013-11-24 09:36:06

标签: c++

我定义了两个头文件。

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

1 个答案:

答案 0 :(得分:-2)

当您在global.h中包含token.h时,编译器可以使用完整的信息。尝试将global.h包含在另一个文件中,您将遇到编译错误: - )