Russian Qt Forum
Ноябрь 22, 2024, 12:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]помогите с ошибками(game dev)  (Прочитано 7874 раз)
Noize_programmer
Чайник
*
Offline Offline

Сообщений: 91


работает не трогай


Просмотр профиля WWW
« : Август 25, 2023, 11:21 »

проект: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
« Последнее редактирование: Сентябрь 03, 2023, 12:18 от Noize_programmer » Записан

Официальная стандартизация языка с++ началась в 1998 году, когда был опубликован стандарт языка ISO/IEC 14882:1998(известный как C++98), разработанный комитетом по стандартизации C++(ISO/IEC JTC1/SC22/WG21 working group)
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #1 : Август 25, 2023, 16:04 »

Два раза на одни грабли... (http://www.prog.org.ru/index.php?topic=33465.msg247268#msg247268)
Вы объявление от определения отличаете? Статический член не принадлежит классу. Его надо еще определить:
QVector<int> Global::settings;
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Август 25, 2023, 16:14 »

Код:
settings.operator[](4)
а чем не устроило?
Код:
settings[4]
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Noize_programmer
Чайник
*
Offline Offline

Сообщений: 91


работает не трогай


Просмотр профиля WWW
« Ответ #3 : Август 28, 2023, 16:43 »

Код:
settings.operator[](4)
а чем не устроило?
Код:
settings[4]
выдаёт ошибку
Записан

Официальная стандартизация языка с++ началась в 1998 году, когда был опубликован стандарт языка ISO/IEC 14882:1998(известный как C++98), разработанный комитетом по стандартизации C++(ISO/IEC JTC1/SC22/WG21 working group)
Noize_programmer
Чайник
*
Offline Offline

Сообщений: 91


работает не трогай


Просмотр профиля WWW
« Ответ #4 : Август 28, 2023, 16:55 »

Два раза на одни грабли... (http://www.prog.org.ru/index.php?topic=33465.msg247268#msg247268)
Вы объявление от определения отличаете? Статический член не принадлежит классу. Его надо еще определить:
QVector<int> Global::settings;

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

Официальная стандартизация языка с++ началась в 1998 году, когда был опубликован стандарт языка ISO/IEC 14882:1998(известный как C++98), разработанный комитетом по стандартизации C++(ISO/IEC JTC1/SC22/WG21 working group)
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #5 : Август 28, 2023, 20:18 »

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

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Noize_programmer
Чайник
*
Offline Offline

Сообщений: 91


работает не трогай


Просмотр профиля WWW
« Ответ #6 : Август 31, 2023, 14:41 »

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

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

Официальная стандартизация языка с++ началась в 1998 году, когда был опубликован стандарт языка ISO/IEC 14882:1998(известный как C++98), разработанный комитетом по стандартизации C++(ISO/IEC JTC1/SC22/WG21 working group)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.