我正在用C ++编写一个词法分析器,并且必须为我的子类包含一个to_string()
方法。这种方法不会被词法分析器使用,但我们被告知必须将它们包含在内以便进行调试。我写的to_string
方法一直在产生错误,我不知道为什么。这就是我所拥有的:
string *AddopToken::to_string()
{
token_type_type tokenType = get_token_type();
addop_attr_type addopAttr = get_attribute();
return "[TOKEN TYPE: " + tokenType + ", ATTRIBUTE TYPE: " + addopAttr + "]";
}
这似乎应该有用,但出于某种原因它不会。
以下是AddopToken标题中addop_attr_type
的typedef。
typedef enum addop_attr { ADDOP_ADD = 400,
ADDOP_SUB = 401,
ADDOP_OR = 402,
ADDOP_NO_ATTR = 499 } addop_attr_type;
所以即使addopAttr
的类型是addop_attr_type
,所有真正的是一个int常量。我认为C ++可以将int转换为字符串。有没有办法将这些变量转换为字符串,以便我的to_string()
能正常工作?
答案 0 :(得分:0)
C ++不允许+用于串联字符串文字或字符串文字与整数。 您需要的代码是
char buff[1204];
sprintf(buff, "[TOKEN_TYPE; %d , ATTRUBUTE_TYPE %d ]", tokenType, addopAttr);
return std::string(buff);
你不必使用旧的C函数sprintf,人们为实现类似的事情而发明了许多C ++函数,并且摆脱了临时缓冲区,但代价是更难以遵循什么是在下面继续。
答案 1 :(得分:0)
这应该适合你:
编辑:现在它返回指向字符串的指针,在完成使用后忘记删除指针。
std::string* AddopToken::to_string() const{
token_type_type tokenType = get_token_type();
addop_attr_type addopAttr = get_attribute();
std::string* result = std::string();
*result = std::string("[TOKEN TYPE: ") + std::to_string(tokenType) + std::string(", ATTRIBUTE TYPE: ") + std::to_string(addopAttr) + std::string("]");
return result;
}
C ++见" [TOKEN TYPE:"作为char [14]而不是字符串。要将int转换为字符串,请使用std :: to_string()。