Russian Qt Forum

Qt => Общие вопросы => Тема начата: Noize_programmer от Август 25, 2023, 11:21



Название: [РЕШЕНО]помогите с ошибками(game dev)
Отправлено: Noize_programmer от Август 25, 2023, 11:21
проект:https://github.com/SpeechKingV/guess_the_number__with_graphics (https://github.com/SpeechKingV/guess_the_number__with_graphics)

в Ssettings_window.h я добавил следующий код(перед классом Ssettings_window):
Код:
class Global
{
public:
static QVector<int> settings;
};
и заменил все обращения к переменной settings на Global::settings
пример:
Код:
settings.operator[](4);
на
Код:
Global::settings.operator[](4);
(Ssettings_window.h подключен в каждый файл где есть обращение к переменной settings)

ошибки:
  • GuessTheNumber_WithGraphics.cpp:-1: ошибка: undefined reference to `Global::settings'
  • :-1: ошибка: collect2.exe: error: ld returned 1 exit status
  • :-1: ошибка: [Makefile.Debug:96: debug/guess_the_number__with_graphics.exe] Error 1


Название: Re: помогите с ошибками(game dev)
Отправлено: sergek от Август 25, 2023, 16:04
Два раза на одни грабли... (http://www.prog.org.ru/index.php?topic=33465.msg247268#msg247268)
Вы объявление от определения отличаете? Статический член не принадлежит классу. Его надо еще определить:
QVector<int> Global::settings;


Название: Re: помогите с ошибками(game dev)
Отправлено: kambala от Август 25, 2023, 16:14
Код:
settings.operator[](4)
а чем не устроило?
Код:
settings[4]


Название: Re: помогите с ошибками(game dev)
Отправлено: Noize_programmer от Август 28, 2023, 16:43
Код:
settings.operator[](4)
а чем не устроило?
Код:
settings[4]
выдаёт ошибку


Название: Re: помогите с ошибками(game dev)
Отправлено: Noize_programmer от Август 28, 2023, 16:55
Два раза на одни грабли... (http://www.prog.org.ru/index.php?topic=33465.msg247268#msg247268)
Вы объявление от определения отличаете? Статический член не принадлежит классу. Его надо еще определить:
QVector<int> Global::settings;

извините за это,(это была попытка создать переменную доступную во всех классах)
подскажите пожалуйста как создать переменную доступную во всех классах ??? ??? ???


Название: Re: помогите с ошибками(game dev)
Отправлено: sergek от Август 28, 2023, 20:18
подскажите пожалуйста как создать переменную доступную во всех классах ??? ??? ???
Так ведь это зависит от задачи. Если это глобальное свойство всех ваших классов, то нужно создать базовый класс, в котором объявить эту переменную, как статический член. А все ваши классы наследуете от этого базового класса.
Если это просто какая-то переменная, содержащая данные, используемые в объектах ваших классов, то - объявляете где-то просто глобальную переменную, а в модулях, в которых используете ее - extern ваша_переменная.
Либо объявляете класс с статическим членом в открытой области. Используете в остальных классах так: Вашкласс::вашапеременная.
Чтобы ограничить видимость этой переменной, можно извратиться - объявить статический член в приватной области. А все остальные классы, которые должны работать с ней, объявляете друзьями (friend class).
Но, на мой взгляд, из того, что я перечислил, только первый способ правильный.


Название: Re: помогите с ошибками(game dev)
Отправлено: Noize_programmer от Август 31, 2023, 14:41
подскажите пожалуйста как создать переменную доступную во всех классах ??? ??? ???
Так ведь это зависит от задачи. Если это глобальное свойство всех ваших классов, то нужно создать базовый класс, в котором объявить эту переменную, как статический член. А все ваши классы наследуете от этого базового класса.
Если это просто какая-то переменная, содержащая данные, используемые в объектах ваших классов, то - объявляете где-то просто глобальную переменную, а в модулях, в которых используете ее - extern ваша_переменная.
Либо объявляете класс с статическим членом в открытой области. Используете в остальных классах так: Вашкласс::вашапеременная.
Чтобы ограничить видимость этой переменной, можно извратиться - объявить статический член в приватной области. А все остальные классы, которые должны работать с ней, объявляете друзьями (friend class).
Но, на мой взгляд, из того, что я перечислил, только первый способ правильный.

спасибо за помощь,
но я нащёл другое решение просто вместо масива использую QMap