如何用switch统计错误类型计数?编译报‘errors未声明’错误求助
解决编译错误:
errors未声明的问题 嘿,我来帮你搞定这个编译报错!你遇到的问题很明确——编译器找不到名为errors的变量,因为你在appendError函数里调用了errors.push_back(),但整个代码里根本没声明这个用来收集错误信息的vector<string>。
错误原因分析
看一下你的代码,你声明了totalErrors、lexicalErrors这些静态计数变量,但唯独漏掉了errors这个向量的定义。编译器在处理appendError时,找不到errors的声明,所以抛出了‘errors’ was not declared in this scope的错误。
分步解决方案
1. 添加必要的头文件
首先,要使用vector,你需要在代码顶部包含<vector>头文件(同时确保<string>和printf依赖的<cstdio>也已引入):
#include <vector> #include <string> #include <cstdio>
2. 声明静态的errors向量
把errors和其他静态错误变量放在一起声明,这样它就能在整个文件的函数中被访问:
static int lineNumber; static string error = ""; static int totalErrors = 0; static int lexicalErrors; static int syntaxErrors; static int semanticErrors; static vector<string> errors; // 新增这一行,声明错误信息收集向量 static void displayErrors();
3. 修正appendError函数的冗余代码
你的appendError里有一对多余的大括号,我帮你去掉了,同时确保errors.push_back()能正确访问到变量:
void appendError(ErrorCategories errorCategory, string message) { string messages[] = { "Lexical Error, Invalid Character ", "", "Semantic Error, ", "Semantic Error, Duplicate Identifier: ", "Semantic Error, Undeclared " }; error = messages[errorCategory] + message; totalErrors++; switch (errorCategory) { case LEXICAL: lexicalErrors++; break; case SYNTAX: message = message.substr(15); syntaxErrors++; break; case GENERAL_SEMANTIC: case DUPLICATE_IDENTIFIER: case UNDECLARED: semanticErrors++; break; } errors.push_back(messages[errorCategory] + message); }
额外提醒
- 确保
ErrorCategories这个枚举类型已经被正确定义(比如enum ErrorCategories {LEXICAL, SYNTAX, GENERAL_SEMANTIC, DUPLICATE_IDENTIFIER, UNDECLARED};),不然后续可能会有其他编译错误。 - 如果之后你需要在
displayErrors或者lastLine里输出errors中的所有错误信息,直接访问这个静态向量即可。
内容的提问来源于stack exchange,提问作者Calvin W
相关产品推荐
相关产品推荐

