Я довольно новичок в программировании и пытаюсь использовать оператор switch для сбора и увеличения количества ошибок по типам. Затем я пытаюсь собрать сообщения, используя строковый вектор, но я получаю сообщение об ошибке при компиляции.
"g++ -c listing.cc
listing.cc: In function ‘void appendError(ErrorCategories, std::__cxx11::string)’:
listing.cc:71:3: error: ‘errors’ was not declared in this scope
errors.push_back(messages[errorCategory] + message);
^~~~~~
listing.cc:71:3: note: suggested alternative: ‘error’
errors.push_back(messages[errorCategory] + message);
^~~~~~
error
makefile:20: recipe for target 'listing.o' failed
make: *** [listing.o] Error 1"
Это часть моего кода для функции appendError.
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);
}
}
Вот остальная часть кода.
static int lineNumber;
static string error = "";
static int totalErrors = 0;
static int lexicalErrors;
static int syntaxErrors;
static int semanticErrors;
static void displayErrors();
void firstLine()
{
lineNumber = 1;
printf("\n%4d ",lineNumber);
}
void nextLine()
{
displayErrors();
lineNumber++;
printf("%4d ",lineNumber);
}
int lastLine()
{
if (totalErrors > 0)
{
printf("errors\n");
displayErrors();
}
else
{
printf("Compiled Successfully\n");
return totalErrors;
}
}
void displayErrors()
{
if (error != "")
printf("%s\n", error.c_str());
error = "";
}
Все это было частью скелетного кода, который я получил от одного из моих приятелей.