0
我定義了兩個頭文件。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,但我不使用類令牌的引用或指針。我在global.h中使用std::queue<Token> empty;
。我認爲這個聲明必須要有令牌的大小。我無法弄清楚爲什麼它能編譯成功。這是queue
的問題?
您基本上問「爲什麼編譯時使用C++標準容器與不完整的類型?」。在這裏,你使用的標準容器是'std :: queue','Token'是不完整的類型。 [C++ *標準*技術上不允許這樣](http://stackoverflow.com/questions/18672135/why-c-containers-dont-allow-incomplete-types),但它可能恰好工作,因爲內部容器*實現*不需要完整的類型。其他C++編譯器可能會也可能不會。 –
你說得對。我使用的第一個編譯器是gcc。微軟的編譯器指出這個錯誤。感謝很多。@在計算機上 – stamaimer