класс — & quot; Y не называет тип & quot; ошибка в переполнении стека

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

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;

13

Решение

Вы не можете помещать назначения вне контекста функции в C ++. Если вы озадачены тем фактом, что вы иногда видели = символ, используемый вне контекста функции, такой как:

int x = 42; // <== THIS IS NOT AN ASSIGNMENT!

int main()
{
// ...
}

Это потому что = символ может быть использован для инициализация также. В вашем примере вы не инициализируете элементы данных width а также height, вы присваиваете им значение.

24

Другие решения

В C ++ 11 вы можете написать

struct Settings {
int width;
int height;
} settings = { 800, 600 };

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

РЕДАКТИРОВАТЬ:

По поводу вашего редактирования, просто напишите

Settings settings = {{800, 600}, {10, 20, 3}};

Я не уверен на 100%, если это работает, хотя из-за наследства. Я бы рекомендовал в этом случае избежать наследования и написать Dimensions как данные участника в ваш Build_menu состав. Наследование рано или поздно доставит вам массу неприятностей, если использовать его таким образом. Предпочитаю композицию наследованию. Когда вы это сделаете, это будет выглядеть

Settings settings = {{800, 600}, {{10, 20}, 3}};
8

По вопросам рекламы ammmcru@yandex.ru