使用未声明的标识符'令牌'

时间:2015-06-15 13:44:55

标签: c++ gcc g++

我在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;
}

使用未声明的标识符'令牌'

任何人都可以帮助我?

2 个答案:

答案 0 :(得分:3)

你的头部防守不正确。它应该是:

#ifndef _TOKEN_H
// ^

此外,以下划线和大写字母开头的令牌保留给实现的任何用途。所以它应该是:

#ifndef TOKEN_H

甚至是#ifndef TOKEN_H_GUARD

答案 1 :(得分:1)

两件事:

  1. #ifdef _TOKEN_H需要#ifndef _TOKEN_H。 (同时避免使用大写字母后跟下划线,因为从技术上讲,程序的行为将是未定义的。)

  2. 在标题中使用std::string代替string,因为您在using namespace std;

  3. 之前加入了标题

    在标题中编写using namespace std;可以解决名称空间污染问题,因此您目前正在做的事情更可取。