我在C写一个翻译,但复杂性太高了。我开始把代码放到cpp类中,我得到一个错误:
#ifdef _TOKEN_H
#define _TOKEN_H
enum TOKEN_TYPE {INTEGER, IDENTIFIER, KEYWORD, OPERATOR, UNKNOWN};
class Token
{
public:
Token(string v = "", TOKEN_TYPE t = UNKNOWN);
private:
string value;
TOKEN_TYPE type;
};
#endif
和Token.cpp
#include "Token.h"
using namespace std;
Token::Token(string v, TOKEN_TYPE t)
{
value = v;
type = t;
}
使用未声明的标识符'令牌'
任何人都可以帮助我?
答案 0 :(得分:3)
你的头部防守不正确。它应该是:
#ifndef _TOKEN_H
// ^
此外,以下划线和大写字母开头的令牌保留给实现的任何用途。所以它应该是:
#ifndef TOKEN_H
甚至是#ifndef TOKEN_H_GUARD
答案 1 :(得分:1)
两件事:
#ifdef _TOKEN_H
需要#ifndef _TOKEN_H
。 (同时避免使用大写字母后跟下划线,因为从技术上讲,程序的行为将是未定义的。)
在标题中使用std::string
代替string
,因为您在using namespace std;
在标题中编写using namespace std;
可以解决名称空间污染问题,因此您目前正在做的事情更可取。