Ответы пользователя по тегу C++
  • Как решить проблему с модальными окнами?

    Adamos
    @Adamos
    Например, так: в классе родительского окна заведите член - указатель на модальный диалог. В нем должен быть NULL по умолчанию и при закрытии диалогов.
    В методе обновления / отрисовки / idle (что там вы можете переопределить) проверяете, есть ли значение у этого члена. Если есть - посылаете ему ToTop или как оно там у Борланда называется.
    Примерно так.

    Можно еще поиграться с выставлением основному окну Enable(false) при открытии диалога, но это уже шаманство, и на другом компьютере поведение может отличаться.
    У вас проблема-то, скорее всего, из-за чудес оконного менеджера Восьмерочки-Десяточки, не разобравшегося, что диалог модальный и рассматривать его, как отдельное окно, не нужно.
    Ответ написан
    Комментировать
  • Как коротко и эффективно записать if конструкцию для множества условий?

    Adamos
    @Adamos
    Вам платят за экономию строчек?
    Как бы вы ни написали (хоть switch - case), в машинном коде все равно будут сравнения и ветвления.
    Так что не заморачивайтесь с запихиванием этого в итераторы, а постарайтесь записать так, чтобы читалось беглым взглядом - и невозможно было сделать опечатку, которая тем же первым взглядом не выявлялась бы.

    Кстати, компилятору тоже легче применять оптимизации, когда код пусть громоздок, но примитивен.
    Ответ написан
  • Есть ли аналог str.charCodeAt(index) для С++?

    Adamos
    @Adamos
    "Для С++" - это слишком расплывчато.
    Если речь об однобайтных строках (char[], char* или std::string) - то str[idx] будет тем самым нужным вам значением.
    Но только в том случае, если содержимое в однобайтной же кодировке.
    А если там, скажем, utf-8 - то тут вы вряд ли обойдетесь без соответствующей библиотеки.
    Ответ написан
  • Что лучше изучать впервые? WinAPI || Boost || Qt?

    Adamos
    @Adamos
    Весь список бессмысленно просто учить - его надо изучать, уже применяя в живом проекте.
    Поэтому Qt имеет смысл ставить первым - шире сфера применения.
    Boost еще надо поискать, где применить в обычном прикладном приложении...
    WinAPI имеет смысл изучать только в том случае, если вам хочется заниматься win-only программами.
    Для программирования "и под Windows тоже" мне лично он не требуется.
    Две-три функции, которые не реализованы в кроссплатформенных библиотеках, можно просто нагуглить.

    > Часто ли разработка на C++ ведется под Windows?
    На Тостере появляются вопросы от студентов, которые борются с Вижуал Студией вместо того, чтобы программировать. Часто появляются. Лучше сразу привыкнуть к QtCreator - и вам будет все равно, какая под ним ОС.
    Ответ написан
    Комментировать
  • Использование вариативного шаблона функции без аргументов?

    Adamos
    @Adamos
    Я бы в вашем случае погасил лампадку перед портретом Александреску и перестал насиловать компилятор.
    Добиваясь поставленной цели, вы запутываете код - и при этом решительно ни в чем не выигрываете.
    Ответ написан
    Комментировать
  • Что делает этот кусок кода?

    Adamos
    @Adamos
    Считывает в header.signature первые 6 байт из файла.
    Как это делается - см. учебник по С++ (просто заявить "непонятный момент" недостаточно).
    Ответ написан
    Комментировать
  • Какие возникают проблемы при работе с Unicode и какие им есть решения на C++?

    Adamos
    @Adamos
    UTF8-CPP - использовал, когда приходилось писать без использования кроссплатформенных фреймворков. Основные проблемы решает.
    Главное - привести все входящие строки к utf-8 и не забыть их конвертировать в выходную кодировку, если это требуется. А вся обработка - только в utf-8, готовых решений для этого более чем достаточно.
    Ответ написан
  • Почему так сильно глючит редактор?

    Adamos
    @Adamos
    С тем, что MS предпочитает, чтобы вы писали на ее фирменном Шарпе, а не на этих Крестах, с которыми можно свалить с Виндов и сделать ручкой.
    Поэтому разбор крестового кода проводит тормозной монстр Intellisense, и летать он не будет уже, похоже, никогда.
    Ставьте QtCreator или Code::Blocks, если хотите, чтобы IDE не мешала вам работать. Заодно от подоконника отвыкнете...
    Ответ написан
    Комментировать
  • Мало весящий IDE для С++?

    Adamos
    @Adamos
    Полноценный (с анализом кода и прочими плюшками) и при этом легкий - вещи сугубо взаимоисключающие.
    VisualStudio с С++ ведет себя так, как будто рекламирует С# (ирония, но недалекая от истины). Анализ кода там тормозит безбожно, на слабом железе его просто не дождешься. Хотя, может быть, хэлловорды он и быстро будет прожевывать...

    Eclipse, NetBeans, Clion - это все-таки Java со всеми из нее вытекающими - медленно и печально. Для слабого железа опять-таки противопоказано.

    QtCreator - имеет довольно много плюсов, но объем действительно может зашкаливать, так как он тащит за собой весь Qt в обязательном порядке.

    Есть легкие Code::Blocks и CodeLite - в принципе, настолько легкие, что их просто стоит попробовать, а если будет некомфортно - тогда уже подниматься по этому списку вверх ;)

    Альтернатива в порядке бреда: поставить какую-нибудь древнюю VS, которая еще нормально жевала С++ на слабых машинках (то есть до 2008 версии). Если она запустится на "десятке", то для изучения "крестов" может вполне сгодиться. С++0х и С++11, правда, придется исключить из учебной программы.
    Ответ написан
    2 комментария
  • Как работает деинсталятор?

    Adamos
    @Adamos
    А зачем вы пишете деинсталлятор, когда есть готовые, полноценные и при этом бесплатные решения вроде NSIS, например?
    Ответ написан
    Комментировать
  • Почему не компилируется helloworld с использованием wxWidgets?

    Adamos
    @Adamos
    Вообще-то актуальная версия библиотеки - третья.
    У вас же почему-то линкер ищет библиотеки для 2.8
    Ну, и, скачав эту библиотеку с официального сайта, первым делом ее саму надо скомпилировать.
    По инструкции с того же сайта.
    Ответ написан
  • Какую книгу выбрать?

    Adamos
    @Adamos
    Для начала - любой учебник по С++, кроме учебников по VisualC++ и BorlandC++ (эти плохому научат).
    Потому что С++ имеет такую особенность: 80% языка принципиально непонятны и чужды тому, кто еще не освоил базовые 20% и не имеет достаточного практического опыта их применения.

    Вам нужно самостоятельно написать километры говнокода, чтобы понять правильный подход к ООП в С++, шаблоны, достоинства ссылок перед указателями, применение const и т.п. Никакой учебник тут не поможет.
    Ответ написан
    3 комментария
  • Не открывается файл?

    Adamos
    @Adamos
    В С++11 функция std::ifstream::open принимает аргументом std::string.
    Калечить путь переводом c_str не нужно.
    Ответ написан
    Комментировать
  • Почему изменяются значения полей объекта структуры?

    Adamos
    @Adamos
    Студенчеству, конечно, многое простительно, но зачем использовать С++ как С?
    MAX_SURNAME_SIZE - это сколько? У моей супруги двойная фамилия (24 символа). Влезет?
    MAX_PASSWORD_SIZE - сколько? Один из моих паролей - легко запоминающаяся, не подбираемая фраза на 36 символов.
    А всего-то - перегнать этот "FILE * accounts" в банальный XML и читать его чем-нибудь типа pugixml.
    И никаких плясок с памятью и переполнением, и никаких ограничений на длину и язык поля, и никаких простыней одинаковых операторов, в любом из которых может крыться досадная опечатка.

    И никоим образом не уменьшит секьюрность, если что. Потому что ваш бинарный файл читается глазами без всяких проблем... Пароли-то - открытым текстом, небось? Хэш и соль еще не проходили?

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

    Adamos
    @Adamos
    Вы какой-нибудь GUI-фреймворк для программы используете?
    С высокой вероятностью в нем уже есть такой функционал.
    Ответ написан
  • Почему константное значение Qstring?

    Adamos
    @Adamos
    Передавая в функцию const QString &peer, вы:
    1. не тратитесь на копирование ее содержимого
    2. имеете к ней такой же доступ, как к локальной переменной
    3. но не можете изменить

    Обычно ради 1 и 3, собственно, const-ссылки и используются. Особенно если объект еще сложнее, и его копирование невозможно или нежелательно в принципе.
    Ответ написан
    Комментировать
  • Стоит ли делать в таком случае базовый класс и наследоваться от него?

    Adamos
    @Adamos
    Нет, так делать не стоит.
    Вы таким наследованием нарушаете L в SOLID.
    Ответ написан
    2 комментария
  • Изменяются данные в массиве без ведома?

    Adamos
    @Adamos
    Если у вас меняются те данные, которые вы не предполагали менять - очевидно, где-нибудь какое-нибудь tmp[n * n + n + i] указывает не на элемент этого массива, а за его пределы (индекс получается больше размера массива).
    Ответ написан
    Комментировать
  • Как применить динамическую память для хранения соразмерного количества символов с ввода?

    Adamos
    @Adamos
    А с чего бы его принимать?
    У вас выделяется динамическая память размером в один байт.
    Потом, начиная с этого адреса, впихивается весь ввод.
    Уже на втором символе программа просто обязана упасть.
    Причем даже при вводе длиной в один символ этим вторым будет завершающий ноль.

    Даже в задании написано про перевыделение памяти - какого, собственно?
    Ответ написан