Ошибка «Y не называет тип» в C ++

Я не знаю, что искать, чтобы найти объяснение этому, поэтому я спрашиваю.
У меня есть этот код, который сообщает об ошибке:

struct Settings{
    int width;
    int height;
} settings;

settings.width = 800; // 'settings' does not name a type error
settings.height = 600; // 'settings' does not name a type error

int main(){
    cout << settings.width << " " << settings.height << endl;

но если я поставлю присвоение значения в main, это сработает:

struct Settings{
    int width;
    int height;
} settings;

main () {
    settings.width = 800; // no error
    settings.height = 600; // no error

Можете ли вы объяснить мне, почему?

РЕДАКТИРОВАТЬ:
Что касается ответа Ральфа Тандецкого, вот мой полный структурный код. Не могли бы вы показать мне, как назначить значения, как вы сделали с моей структурой фрагмента?

struct Settings{
    struct Dimensions{
        int width;
        int height;
    } screen;

    struct Build_menu:Dimensions{
        int border_width;
    } build_menu;
} settings;

Ответы на вопрос(2)

Ваш ответ на вопрос