Как правильно использовать оператор switch для сбора количества ошибок? - PullRequest
0 голосов
/ 09 апреля 2020

Я довольно новичок в программировании и пытаюсь использовать оператор 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 = "";
}

Все это было частью скелетного кода, который я получил от одного из моих приятелей.

...