это неопределенное предупреждение для функций, которые уже существуют в #include

1061
Rogério Dec

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

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

enter image description here

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

1
У вас случайно не появляется объявление метода после этого конкретного вызова? Я полагаю, вы пытались закрыть и снова открыть проект? Ramhound 5 лет назад 0
@ Ramhound Интересно, означает ли здесь «функции» функции? Макрос препроцессора также может иметь место, и они могут легко запутать проверку синтаксиса. Tonny 5 лет назад 0
@ Тонни - я бы тоже согласился. Не ясно, является ли "идентификатор" разнесен "неопределенным, является предупреждением или ошибкой в ​​этом случае. Если это была синтаксическая ошибка, то код должен быть скомпилирован. Без всего файла или фактического вывода компиляции, я не Не думаю, что мы можем на самом деле сказать причину, по которой генерируется эта ошибка. из этого сообщения об ошибке. Однако, исходя из моего почти двух десятилетий использования Visual Studio для компиляции кода C ++, я собираюсь предположить, что где-то в int отсутствует скобка он код. Ramhound 5 лет назад 0

2 ответа на вопрос

1
Tonny

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

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

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

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

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

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

0
Rogério Dec

Это определенно ошибка в 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; } 

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