Ответы пользователя по тегу C++
  • С чего начать OpenGL?

    @koronabora
    Человек
    1) Если стоит задача просто разработать программу: использовать готовый движок Ogre.
    2) Если стоит задача изучить Opengl с нуля, то лучше взять библиотеки отсюда: https://www.opengl.org/sdk/libs/
    Ответ написан
  • Как получить доступ к приватным членам класса из статического метода?

    @koronabora
    Человек
    Необходимо разнести статические методы и переменные по разным классам. В классе для переменных сделать обертки для доступа к ним, и этот класс с переменными отдавать указателем в статический метод.

    Грубо говоря, экземпляры класса и статические методы лежат в разных областях памяти. Если еще грубее, то статические методы не принадлежат никакому экземпляру класса, но, в то-же самое время, доступны в своей области видимости любому.
    Ответ написан
    Комментировать
  • Как составить план обучения?

    @koronabora
    Человек
    Предлагаю такой вариант:
    Книги по С++ не бросаете, проходите, обязательно выполняйте задания.
    В вузе, по мере обучения, будут рассказывать о разных вещах, будет повторение. Главная задача - вспомнить что было в книге. Идеально - после занятий, вечерком, накодить пару примеров и глянуть что с решением подобных задач в Java, например, какие отличия в подходах, плюсы и минусы. Синтаксис у языков практически одинаков, необходимо будет только разобраться в смысловой разнице.

    Самое главное - писать как можно больше работающих программ, больших и маленьких, доводить их до конца, отлавливать баги.

    Да, еще рекомендую взять в учебном заведении стандарт оформления кода. Если такового нет, то необходимо воспользоваться вот этим, например: https://habrahabr.ru/post/172091/

    На данном этапе будет очень сложно, муторно и противно, но надо прорваться сквозь череду ошибок, освоить язык на базовом уровне. Заодно и немного будете Java понимать, если будете следовать моему совету.

    А дальше - уже немного другой разговор будет.
    Ответ написан
    Комментировать
  • Не компилируется дефолтное приложение на библиотеке SFML, что делать?

    @koronabora
    Человек
    Мало инфы - среда разработки, прилинкованы-ли либы SFML, подключены-ли пути к lib и h файлам?
    Ответ написан
    Комментировать
  • Как добавить в свой проект cURL - работающее решение?

    @koronabora
    Человек
    Исходя из ошибки, одна из библиотек не той разрядности или вообще не под ту архитектуру.
    Ответ написан
    Комментировать
  • Библиотека цифровых фильтров на C/C++?

    @koronabora
    Человек
    Ответ написан
    Комментировать
  • Какой стек современных/актуальных/развивающихся/востребованных технологий для разработки серъёзных игр(с большим бюджетом) под Windows?

    @koronabora
    Человек
    Надо понимать, какая игра и для чего используется. Если серьезная работа с графикой, то это чаще всего С++ с разными библиотеками, от физики, до звука и подгрузки скриптов. Из графических API используют DirectX, сейчас Vulkan подоспел. Вообще, большие фирмы допиливают свой движок, который у них уже давно есть, а маленькие покупают чужой. У каждого движка свою плюсы и минусы, где-то дописывают сетевую часть.

    Если игра браузерная, тот тут совсем другой расклад. На мобильных платформах свои варинаты и фреймворки.

    У каждого вопроса свои алгоритмы, техники и возможности. Часто разработчики сильно ограничены движком, а часто изобретают свои интересные алгоритмы.

    Общие компоненты примерно такие:
    1) Ядро, обеспечивающие game loop и обработку событий, подготовку сцены, сохранение прогресса игры, первичную загрузку
    2) SDK для разработки мира и скриптов, хранение ресурсов, система патчей
    3) Рендер. Все, что касается отрисовки и подготовки мира к отрисовке.
    4) Звук
    5) Физика
    6) Графический интерфейс, конфигурационные файлы
    7) Защита от пиратства
    8) Система модификаций (у разработчиков свое SDK чаще всего)
    9) AI
    10) Система скриптов и "проигрывания" сюжета
    11) Сетевая часть
    И еще всякие разные интересные мелочи.

    Для некоторых платформ эти пункты не актуальны, но чаще всего игровой движок уже умеет большую часть этого всего делать и его просто допиливают под свои нужды (если лицензия подразумевает передачу исходников), либо выкручиваются из того, что есть (если нет исходников)
    Ответ написан
    Комментировать
  • Изучил основы C/C++ и хотел бы написать уже хорошую программу с интерфейсом и оболочкой, но с чего начать изуениеGUI?

    @koronabora
    Человек
    Точно необходимо понять многопоточность, взаимодействие потоков, блокировки. Это базовый минимум, т.к. GUI всегда работает в отдельном потоке. Второе - понять, что в GUI оперируют понятием события. Нажатие на кнопку - событие, движение мыши - событие. Отсюда вытекает необходимость почитать и понять про главный цикл, по-другому цикл обработки событий или цикл обработки сообщений.

    Для начальной разработки GUI отлично подходит QT с системой сигналов, слотов. Эти сигналы и слоты помогают очень просто организовать взаимодействие потока интерфейса и остального приложения.
    Ответ написан
  • Как распарсить html страницу на объекты в qt?

    @koronabora
    Человек
    Взять код отсюда и поменять под себя:
    Chromium HTML tree builder
    Ответ написан
    Комментировать
  • Можно ли создать крутой проект на Arduino не имея опыта с физикой/радиоэл.?

    @koronabora
    Человек
    Будете учится походу. Купите сразу несколько Arduino, первый контроллер скорее всего сгорит в процессе обучения.
    Ответ написан
    6 комментариев
  • Какой контрол умеет быстро менять цвет?

    @koronabora
    Человек
    У 2D интерфейса, частота обычно около 25-40 кадров в секунду. Лучше использовать OpenGL или Direct3D
    Ответ написан
    Комментировать
  • Некорректная компиляция Qt приложения в msvc2015?

    @koronabora
    Человек
    MSVC Qt plugin необходимо установить и в нем пути прописать.

    А еще, если им собирать 32 битное приложение в 64 битной системе, где 64 битный QT первый в Path, то windeployqt будет копировать 64 битные библиотеки в 32 битное приложение. Приходится ручками наполнять первый раз.

    С 64 битным приложением нет проблем.
    Ответ написан
  • Как пользоваться QDataStream?

    @koronabora
    Человек
    Вот кусок из рабочего проекта, способ использования взят из документации qt.

    void TcpClient::sendToServer(QString data)
    {
    	if (_socket != Q_NULLPTR)
    	{
    		res = "";
    
    		while (_socket->state() != QAbstractSocket::ConnectedState)
    		{
    			if (_socket->state() != QAbstractSocket::ConnectingState && _socket->state() != QAbstractSocket::HostLookupState)
    			{
    				_socket->connectToHost(_name, _port); // try to connect
    				alreadyConnected = true;
    			}
    			QApplication::processEvents();
    			QThread::currentThread()->msleep(NET_IO_CONNECT_DELAY);
    			qDebug() << "waiting for connection";
    		}
    
    		if (alreadyConnected) // we connected to server few times ago. Let's wait
    		{
    			QThread::currentThread()->msleep(NET_IO_DELAY_AFTER_CONNECTION);
    			alreadyConnected = false;
    		}
    		qDebug() << "Send to server";
    		QByteArray block; 
    		QDataStream out(&block, QIODevice::WriteOnly); 
    		out.setVersion(QDataStream::Qt_5_6);
    		out << (quint16)0; // Забиваем память под размер
    		out << _realId; // записываем реальные данные
    		out << data; // еще немного реальных данных
    		out.device()->seek(0); // переходим на начало
    		out << (quint16)(block.size() - sizeof(quint16) - sizeof(quint64)); // записываем размер сообщения
    		quint64 sss = _socket->write(block); // отправляем в сокет
    		if (sss < block.size()) // сокет сожрал не все
    			qDebug() << "Буфер маловат будет!" << sss << " != " << block.size(); //
    		else if (sss > block.size()) // сокет сожрал больше, чем необходимо
    			qDebug() << "Что-то лишнее в буфере! " << sss << " != " << block.size(); //
    		qDebug() << "Data written: " << data; // сокет все-таки молодец
    		_socket->flush(); // выталкиваем данные в сеть
    		_lastMessage = data;
    		_timeOutTimer->setSingleShot(true); // ждем немного
    		_timeOutTimer->start(NET_IO_DELAY); // чтобы сетевой стек успел отправить данные
    	}
    	else qDebug() << "Socket is null!";
    }
    Ответ написан
    Комментировать
  • Как сохранить жизнь переменной стека?

    @koronabora
    Человек
    Какие-то страшные операции с памятью.

    Сама суть стэка - это хранение временных значений, которые автоматически будут удалены из памяти при выходе из подпрограммы (процедуры или функции).

    Решения два:
    1) Использовать рекурсию, тем самым забивая стек и не давая удалить то, что требуется. Но, это достаточно безграмотный подход. У рекурсии свой круг задач и она немного не для таких вещей.
    2) Действовать как правильно - выделять память в куче (heap), используя оператор new, а внутрь функции передавать указатель на область памяти в кучу.

    void someFunction(int index, Value *value) {
    	if (value!=NULL)
    		switch(index) {
    		case 0: 
    			SomeTypeOne t = someObject->someMethodOne(); // возвращает SomeTypeOne
    			value->type = "SomeTypeOne";
    			break;
    		case 1: 
    			SomeTypeTwo t = someObject->someMethodTwo(); // возвращает SomeTypeTwo
    			value->type = "SomeTypeTwo";
    			break;
    		}
    }
    Ответ написан
    Комментировать
  • Указатели в C++: что такое "x{"?

    @koronabora
    Человек
    Это мусор в памяти.

    Почему так происходит - char* воспринимается как строка, по стандарту с
    Далее - длина, занимаемая в памяти переменной, всегда кратна определенному значению. Как и сам размер, занимаемый в памяти. Это, обычно, 4 байта для х86 и 8 для х64. Технология называется выравниванием.

    Вы в строку записали один символ, а символ конца строки не записали. Прочиталась память до конца промежутка выравнивания и вывелась для вас. Там оказался всякий мусор, как всегда. Это все равно, что вывести неинициализированную переменную.

    З.Ы. А само выравнивание необходимо для быстрого доступа к памяти. Грубо говоря, память разбивается на ячейки и мы всегда знаем, что для большинства переменный адрес делится на 4 или на 8, например.
    Ответ написан
    Комментировать
  • На чем проще программировать под windows?

    @koronabora
    Человек
    Все зависит от уровня и любмого языка.
    Любите С++ - QT
    Любите C# - на нем и пишите. Можно выбрать Mono для кроссплатформенности
    Любите Java - пишите на ней с использованием Java FX
    Знаете python - Tkinter
    Ответ написан
    Комментировать