Russian Qt Forum
Декабрь 09, 2023, 01:07
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
[РЕШЕНО]помогите с ошибками(game dev)
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО]помогите с ошибками(game dev) (Прочитано 1345 раз)
Noize_programmer
Чайник
Offline
Сообщений: 91
работает не трогай
[РЕШЕНО]помогите с ошибками(game dev)
«
:
Август 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
Сообщений: 856
Мы должны приносить пользу людям.
Re: помогите с ошибками(game dev)
«
Ответ #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
Сообщений: 4700
Re: помогите с ошибками(game dev)
«
Ответ #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
Сообщений: 91
работает не трогай
Re: помогите с ошибками(game dev)
«
Ответ #3 :
Август 28, 2023, 16:43 »
Цитата: kambala от Август 25, 2023, 16:14
Код:
settings.operator[](4)
а чем не устроило?
Код:
settings[4]
выдаёт ошибку
Записан
Официальная стандартизация языка с++ началась в 1998 году, когда был опубликован стандарт языка ISO/IEC 14882:1998(известный как C++98), разработанный комитетом по стандартизации C++(ISO/IEC JTC1/SC22/WG21 working group)
Noize_programmer
Чайник
Offline
Сообщений: 91
работает не трогай
Re: помогите с ошибками(game dev)
«
Ответ #4 :
Август 28, 2023, 16:55 »
Цитата: sergek от Август 25, 2023, 16:04
Два раза на одни грабли... (
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
Сообщений: 856
Мы должны приносить пользу людям.
Re: помогите с ошибками(game dev)
«
Ответ #5 :
Август 28, 2023, 20:18 »
Цитата: Noize_programmer от Август 28, 2023, 16:55
подскажите пожалуйста как создать переменную доступную во всех классах
Так ведь это зависит от задачи. Если это глобальное свойство всех ваших классов, то нужно создать базовый класс, в котором объявить эту переменную, как статический член. А все ваши классы наследуете от этого базового класса.
Если это просто какая-то переменная, содержащая данные, используемые в объектах ваших классов, то - объявляете где-то просто глобальную переменную, а в модулях, в которых используете ее - extern ваша_переменная.
Либо объявляете класс с статическим членом в открытой области. Используете в остальных классах так: Вашкласс::вашапеременная.
Чтобы ограничить видимость этой переменной, можно извратиться - объявить статический член в приватной области. А все остальные классы, которые должны работать с ней, объявляете друзьями (friend class).
Но, на мой взгляд, из того, что я перечислил, только первый способ правильный.
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Noize_programmer
Чайник
Offline
Сообщений: 91
работает не трогай
Re: помогите с ошибками(game dev)
«
Ответ #6 :
Август 31, 2023, 14:41 »
Цитата: sergek от Август 28, 2023, 20:18
Цитата: Noize_programmer от Август 28, 2023, 16:55
подскажите пожалуйста как создать переменную доступную во всех классах
Так ведь это зависит от задачи. Если это глобальное свойство всех ваших классов, то нужно создать базовый класс, в котором объявить эту переменную, как статический член. А все ваши классы наследуете от этого базового класса.
Если это просто какая-то переменная, содержащая данные, используемые в объектах ваших классов, то - объявляете где-то просто глобальную переменную, а в модулях, в которых используете ее - extern ваша_переменная.
Либо объявляете класс с статическим членом в открытой области. Используете в остальных классах так: Вашкласс::вашапеременная.
Чтобы ограничить видимость этой переменной, можно извратиться - объявить статический член в приватной области. А все остальные классы, которые должны работать с ней, объявляете друзьями (friend class).
Но, на мой взгляд, из того, что я перечислил, только первый способ правильный.
спасибо за помощь,
но я нащёл другое решение просто вместо масива использую QMap
Записан
Официальная стандартизация языка с++ началась в 1998 году, когда был опубликован стандарт языка ISO/IEC 14882:1998(известный как C++98), разработанный комитетом по стандартизации C++(ISO/IEC JTC1/SC22/WG21 working group)
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...