1

У меня есть исходный код на C ++, который обычно компилируется в Visual Studio 2017, но, как ни странно, VS 2017 показывает красным цветом подчеркнутые имена некоторых функций, которые я создал и оставил в #include , обвиняя в качестве неопределенного идентификатора.

Ну, как это "неопределено", если функции есть, и программа компилируется без ошибок?

Что мне не хватает?

2 ответа2

1

Проверка синтаксиса в IDE не на 100% надежна. Они становятся все лучше и лучше, но 100% -ная точность не достижима, особенно для языков, таких как C и C++, которые допускают макросы препроцессора и тому подобное.

Определенные комбинации содержимого #include в сочетании с пространствами имен и макро-расширениями могут вызвать проверку синтаксиса, даже если код на самом деле правильный.

Ошибка (или просто предупреждение) где-то в коде или включении может также создавать ложные синтаксические предупреждения ниже в исходном файле.

Это не только проблема с Visual Studio. Это может произойти в любой IDE или редакторе, который выполняет подсветку / проверку синтаксиса. Я видел, как это происходит в XCode, Eclipse и CodeBlocks, просто чтобы назвать несколько примеров.

В целом: если вы сталкиваетесь с чем-то подобным, это, как правило, указывает на то, что исходный код, который определяет объявление (в вашем случае это include, который определяет explode ()), возможно, написан неясным, двусмысленным или даже неправильным образом. Даже если он компилируется для вашего конкретного использования функции explode () в исходном коде, он может этого не делать для всех возможных вариантов использования.

Вам следует подумать о переработке этого кода, чтобы он больше не показывал красную линию. Это будет сбивать с толку другого программиста, которому нужно работать над кодом позже. И этот другой программист может быть вами, если вам нужно повторно посетить код через несколько месяцев и забыть обо всем этом.

0

Это определенно ошибка в VS 2017. Чтобы проверить, я удалил функцию включения и поместил ее в тело исходного кода: отсюда исчезает красная линия. И самое впечатляющее: после повторной активации функции для включения и удаления ее из исходного кода (то есть всего того, что было раньше) VS больше не показывал красную линию, ни для этой функции, ни для других функций, которые ранее появлялись с та же красная линия ...

И просто из любопытства, вот функция:

vector<string> explode(string linha, string delim) {
    vector<string> parte;
    size_t pos = 0,pos2 = 0;
    do {
        pos2 = linha.find(delim, pos);
        parte.push_back(linha.substr(pos, pos2-pos));
        pos = pos2+1;
    } while(pos2 != string::npos);
    return parte;
}

Я не думаю, что проблема с моим кодом ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .