Задать вопрос
Ответы пользователя по тегу C++
  • Можно ли использовать Qt как дополнительную библиотеку?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Да, возможно, и так делают. Но такой подход вызывает некоторые неудобства. Qt заточена под работу со своими типами (например QString) поэтому придется достаточно часто конвертировать одно в другое.
    Кроме того в тех местах где используются, например, сигналы не обойтись без moc, а значит и минимальных но все же изменений.
    Ответ написан
    Комментировать
  • C++: как сделать чтобы перменная string считывалась по 1 знаку?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Пользователь может захотеть исправить текст. Поэтому вычисления лучше делать по нажатию Enter или кнопки на форме. Считывайте всю строку и перебирайте по 1 символу в цикле:
    void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
       if (Key == VK_RETURN)
       {
          string input = Edit1->Text;
          for (size_t i = 0; i < input.length(); ++i)
          {
            //тут делайте с input[i] что хотели
          }
       }
    }


    Но если очень хочется, то обработчик как раз получает параметр Key c последним введенным символом.
    Ответ написан
    Комментировать
  • Реализация арифметических операций. Как устроена?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Реализация зависит от платформы. Вы можете посмотреть во что компилируются интересующие вас операции для конкретного компилятора с помощью дизассемблера (в студии есть встроенный, для unix есть objdump -D > somefile.asm).
    Вообще, оптимизации на уровне арифметических команд это последнее дело. Для начала желательно убедиться, что нет алгоритма с лучшей ассимптотикой (считая что все арифметические операции работают за 1).
    Для обработки однотипных данных возможно получить ускорение за счет векторных операций из расширений процессора SSE* или на GPU.
    Ответ написан
    Комментировать
  • C++, компилятор ведет себя странно или я что-то упустил?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    К сожалению, для компилятора второй случай тоже похож на объявление функции.
    Функции req принимающей один параметр (подробнее по ссылке).
    Первый из предложенных вами вариантов -- отличный выход из этой ситуации. Еще можно написать так:
    QNetworkRequest request((QUrl(s)));
    Upd: нашел подробное описание этой ошибки от Мейерса.
    Ответ написан
    1 комментарий
  • С чего начать изучение Qt5?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Qt это кроссплатформенный С++ фреймворк. Для него написана отличная документация. Просто начинайте использовать его для создания GUI и решения прикладных задач.
    Большой список того что стоит прочитать про linux.
    Ответ написан
    1 комментарий
  • Как восстановить проект Visual Studio после аварийного выключения?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Вы можете поискать файлы по пути вроде этого.
    Если там пусто, то вам придется восстанавливать проект вручную. Скорее всего .cpp и .h файлы с исходным кодом не пострадали. Если это простой проект с несколькими файлами, просто создайте его заново, скопируйте и добавьте старые файлы с кодом. Если вы меняли чужой большой проект, то проще будет взять изначальную версию и скопировать измененные файлы.
    В будующем используйте систему контроля версий, например git. Это не сложно и очень полезно.
    Ответ написан
    2 комментария
  • Ответ сервера делится по пробелам (Qt c++). Как отправлять цельно?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    cin>>message считывает только до пробела.
    используйте www.cplusplus.com/reference/string/string/getline
    Ответ написан
    Комментировать
  • При вызове delete несколько раз,вызывается деструктор столько же раз,че за?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Невиртуальные методы представляют собой обычные функции, которые получают неявный праметр this на экземпляр класса. Получается что даже код.
    A *a = NULL;
    a->f();

    скомпилируется, но будет работать неправильно.
    При вызове нестатических методов (включая деструктор) и обращении к нестатическим полям вы должны гарантировать:
    1. вызвался конструктор, объект существует
    2. не вызывался деструктор, объект еще не удален
    Ответ написан
    1 комментарий
  • Оперции на матрешками или что именно не так?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Вы не транспонируете матрицу, там где думаете
    At[i][j] = A[i][j];
    Это просто копирование, а вывод правильный, потому что вы выводите
    cout << At[j][i] << " ";

    Если вы хотели написать умножение только для матриц 2*2, то нужно исправить:
    C[i][j] = At[i][1] * Bt[1][j] + At[i][2] * Bt[2][j];

    C[i][j] = скалярное произведение i строки At и j столбца Bt
    Ответ написан
  • Действия над строками, что добавить?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    do
    {
        line.erase(i, 1); // удаляет из строки символ с индексом i
    }  while (isalpha(line[i]) != 0);


    Вот этот кусок очень нехороший.
    Во первых в отличие от while(...){}, do{}while (...) делает проверку после того как исполнит свое содержимое. Поэтому, например, первому символу в стоке в любом случае не жить, не важно буква это или нет. Вам нужен обычный while.
    Далее, каждый раз когда вы вызываете line.erase(i, 1); Это неизбежно удаляет символ из строки и уменьшает ее длину. Но вы запомнили длину строчки, когда только прочитали ее в переменной size. Поэтому цикл for будет бежать по тем элементам которых давно уже нет. Избавьтесь от переменной size, сравнивайте i напрямую с line.length().
    Вместо isalpha(line[i]) != 0 лучше писать просто !isalpha(line[i]).
    Едем дальше. Если вы хотите сохранить пробелы, то вам надо удалять текущий символ если он не буква и не пробел. Условие дословно переводим на C++: (!isalpha(line[i]) && line[i] != ' ')
    И еще не совсем ошибка, но если символ не в верхнем регистре, то не обязательно он в нижнем. Например это может быть пробел. К счастью tolower и tщupper ничего не делают с небуквенными символами.
    Ответ написан
    5 комментариев
  • Иллюстрация "Кипящий суп"?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    По вашему описанию вопроса хочется посоветовать вам найти фрилансера, который возьмется за это.
    Если вы умеете писать на C++, можете разобраться с как в glut нарисовать круги и квадраты (шары и паралелепипеды, если вас интересует 3D), то архитектура будет примерно такая.
    Есть модель процесса, которая n раз в секунду расчитывает состояние системы. Есть набор пузыерей, на каждом шаге модели вы можете создать новый пузырь у дна с некоторыми начальными параметрами. Так же, для каждого существующего пузыря вы должны рассчитать его новое положение и размер исходя из его предыдущего состояния. Читаем про скорость всплытия пузырьков, или просто подбираем закон скорости на глаз, если физической точности не требуется.
    Так же потребуется некоторое окно, на котором k раз в секунду данные с модели рисуются c помощю glut.
    Ответ написан
    Комментировать
  • Как настроить компилятор в eclipse?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Решение (добавить инклуд strings.h или найти более новую версию)
    из include подключаются *.h файлы с исходным кодом. В lib же хранятся скомпилированные библиотеки. -lserial подключает библиотеку libserial.
    Ответ написан
  • C++ как исправить ошибки в простейшем коде?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Значения температуры могут получаться не правильными из-за округления при делении. int хранит только целые числа, поэтому при делении на 9 дробная часть отбрасывается. Возможные варианты исправления:
    double ctemp = (double)(ftemp - 32) * 5 / 9; //явно привести тип
    double ctemp = static_cast<double>(ftemp - 32) * 5 / 9; //C++ style cast - безопаснее первого (ругнется если вы пытаетесь привести что-то не то)
    double ctemp = (ftemp - 32) * 5 / 9.0; //делить на константу типа double


    Во втором примере char представляет только один символ (в отличие от строки). У вас же 2 вместе с пробелом.
    char charvar1 = 'A '; //пробел после A
    char charvar2 = '\t '; //пробел после \t
    charvar1 = 'B'; //OK
    cout <<'\n '; //пробел после \n


    При запуске из студии консоль с выводом программы закрывается сразу же при завершении программы. Вы можете не успеть ничего увидеть.
    #include <cstdlib>
    ...
    system("pause"); //перед return 0;
    Ответ написан
  • Проблема с локальными статическими переменными. Соответствует ли это стандарту?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Ключевое слово static как раз предназначено для того чтобы переменная вела себя как глобальная. Почему бы вам не объявить обычный член класса А, тогда он будет принадлежать экземпляру класса?
    Ответ написан
    1 комментарий
  • Как быстро и просто создать {gif,png,jpg}-изображение на языке C++?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Скорее всего удобнее будет все же использовать OpenGL. При этом совершенно не обязательно иметь окно, на котором будет происходить отрисовка. Поищите по ключевым словам offscreen rendering.
    Ответ написан
    Комментировать
  • Как создать два процесса,в котором один отсылает события, а другой распознает их и обрабатывает?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Возможно проблема в этом: If lpEventAttributes is NULL, the event handle cannot be inherited by child processes.
    Ответ написан
  • Изучаю С++ самостоятельно, есть ли работа для Сишников?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    На стажировку желательно идти курсе на 3. Основы C++ должны включать не только базовый синтаксис, но и знания как это все внутри устроено. Нужен опыт написания программ и их отладки.
    Ответ написан
    Комментировать
  • Что теоретически может больше ограничить скорость потоков?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    При увеличении числа потоков, читающих из различных мест (если файл достаточно большой) на жестком диске можно столкнуться с уменьшением производительности за счет I/O scheduling. Для жесткого диска одна из самых медленных операций это seek, который сопровождается физическим перемещением головки. Для минимизации перемещений используются различные алгоритмы. Например это могут быть модификации Elevator algorithm.
    Если чтение станет узким местом, возможно стоит попробовать настроить планировщик.
    Ответ написан
    Комментировать
  • Как скомпилировать под Win 64-Bit?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    В папке с исходниками есть файл README.mingw:

    Установите MinGW and MSYS

    Для установки libdmtx, скачайте и распакуйте the libdmtx source в папку вашего MSYS . По умолчанию она называется C:\msys\1.0.

    Откройте MSYS shell и запустите следующее (напечатайте в консоли и нажмите enter):
    $ ./configure
    $ make
    $ sudo make install

    Зайдите в папку .libs:
    $ cd .libs
    $ ls

    Вы увидите такой вывод
    libdmtx.a libdmtx.la libdmtx.lai libdmtx_la-dmtx.o

    В конце запустите
    $ gcc -shared -o dmtx.dll libdmtx_la-dmtx.o -Wl,--out-implib,libdmtx.a

    Теперь у вас должен быть работающий dmtx.dll в папке .libs.
    Ответ написан
    Комментировать
  • Почему выводится ошибка "необработанное исключение по адресу"?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    matrix[m][n] вместо matrix[i][j] в поиске элемента это выход за границу массива.

    for (int i = m; i < m; i--) //хм
    Ответ написан
    Комментировать