所以我有4个名为Token.h的文件,Token.cpp Lexer.cpp和Lexer.h ...在Token.h中我有一个枚举类,其中包含我的应用程序所需的某些标记。
我正在尝试在令牌中创建一个类(这不是枚举)因为我需要返回令牌和字符串(我从Lexer.cpp传递)
问题是这个。当我尝试在Token.cpp中创建这个类时
class Token
{ // Code needed
};
我在Token.h中声明它(其中包含所有这些代码)
enum class Token
{
// Tokens needed for app
......
......
}
class TokenLookup
{
public:
Token tk;
std::string str;
private:
Token getToken();
std::string getString();
void setToken(Token sToken);
void setString(std::string strbuffer);
};
Token Lexer::getNextToken()
{
char ch;
string bf ="";
ch = ReadChar();
while (input)
{
input.get(ch);
if (isWhitespace(ch))
{
cout << "WS" << endl;
}
else if (isdigit(ch))
{
while(isdigit(ch))
{
bf += ch;
cout << bf << endl;
ch = ReadChar();
}
if(ch != '.')
{
// DO nothing for now
}
}
else if (isalpha(ch))
{
cout << " letter " << endl;
}
else if (isPunctuation(ch))
{
cout << " Punctuation " << endl;
}
else if (isArithmeticOperator(ch))
{
cout << " Arithmetic " << endl;
}
else if (isComparisonOperator(ch))
{
cout << " Comparison " << endl;
}
else
{
cout <<"error" << endl;
}
}
//cout << "Row " << Row << " Col " << Col << " Offset " << Offset << endl;
return Token (tokenNeeded, string) //WARNING! I'VE JUST INVENTED THESE PARAMETERS AS E.G
}
在Lexer.h中(其中包含了Token.h头文件)中的会弹出一个错误说明
||=== Build: Release in Compilers (compiler: GNU GCC Compiler) ===|
E:\University\Compilers\Compilers\lexer.h|27|error: multiple types in one declaration|
E:\University\Compilers\Compilers\lexer.h|27|error: declaration does not declare anything [-fpermissive]|
||=== Build failed: 2 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|
我猜是因为我在token.h中有两个不同的类..但错误在LEXER.h中弹出而不是在Token.h中,这是什么意思它没有声明任何东西?在做这个类之前(类TokenLookup)它工作得很好
我能解决这个问题吗?或者我需要一个新文件?
整个概念是在Lexer.cpp中我开始检查每个字符是什么......然后我返回Token +它的字符串(要添加到Vector)所以最后,我可以继续checkign下一个
由于