error: C++ requires a type specifier for all declarations
Другими словами, ваш выбор для размещения в этом месте в коде ограничен. Среди действительных вариантов декларация наиболее близка к тому, что вы написали. Если вы добавите спецификатор типа, то у вас будет объявление. Это было бы переопределением, но по крайней мере синтаксис соответствует этой части кода.
Подразумевается, что присвоение не является допустимым выбором в этой точке кода. Назначения (в отличие от определений, использующих =
) могут происходить только внутри функций.
Похоже, что clang выдает это конкретное сообщение об ошибке. Вы можете найти g cc менее двусмысленным: error: 'x' does not name a type
.
Разве я не объявил это в строке выше?
Ошибка сообщение об использовании необъявленной переменной больше похоже на error: use of undeclared identifier 'x'
. Вы не получили это сообщение, поэтому преждевременно делать вывод, что x
не объявлено на данный момент. Замечать подобные детали - полезный навык при отладке.