C++的前瞻性声明
foward declaration in C++
我定义了两个头文件。
全球.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
包含在另一个文件中,您将遇到编译错误:-(
相关文章:
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- #ifdef和未声明的标识符
- 没有显式声明的int[]中的foreach
- 在基于范围的for循环中使用结构化绑定声明
- 在将变量声明为引用时,堆在释放后使用
- C++:无法访问声明的受保护成员
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 为什么unknw.h中需要三个前瞻性声明
- 为什么谷歌风格指南不鼓励前瞻性声明
- C++的前瞻性声明
- C++的前瞻性声明 - 什么时候重要?