Ответы пользователя по тегу C++
  • Ошибка undefined reference to `pthread_create'. Как исправить?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    make -j1 -lpthread

    - вместо -lpthread лучше писать -pthread
    - опцию -pthread нужно передавать не make а gcc
    Ответ написан
    8 комментариев
  • Почему не переполняется float?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Объясните почему именно так, с умножение переполняется, а при сложении как будто просто отсекаются лишние биты.

    Потому что именно так и есть: для сложения числа приводятся к одному порядку. Порядок FLT_MAX -- 2^127, порядок 1.0 -- 2^0. Т.е. единица сдвигается на 127 разрядов вправо перед сложением с FLT_MAX. Ни в одном стандартном представлении чисел с плавающей точкой столько разрядов не предусмотрено, лишние разряды отсекаются, единица превращается в 0.

    Минимальное число, которое можно прибавить к FLT_MAX и получить бесконечность равно 2 ^ (127 - 24). При нормализации этого числа с FLT_MAX получается единица сдвинутая вправо на 24 разряда, как раз в последний значащий разряд мантиссы float.
    Ответ написан
    Комментировать
  • Отключается ли detach поток в случае закрытия приложения?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Может ли быть такое, что после закрытия приложения detach поток продолжит работать?

    После завершения приложения -- нет.
    "Закрытие" -- это что-то из мира окон, закрытие окна ничего не значит.
    Ответ написан
    Комментировать
  • Почему компилятор выдает ошибку [Error] ld returned 1 exit status?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    undefined reference to `OpenRusEng'

    ld наверно прав: в приведённом коде действительно нет такой функции.
    Ответ написан
    Комментировать
  • Может ли exe-шник редактировать сам себя?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Может ли exe-шник редактировать сам себя

    Может. Но не должен. Потому что не нужно.
    Ответ написан
    Комментировать
  • Как улучшить код на Си(сделать "красивше")?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    char num1[N];
      char num2[N];
      char num3[N];
      char *nums[3] = {num1,num2,num3};

    А чего не nums[3][N]?

    while(c=fgetc(in))

    Когда ты думаешь условие while перестанет выполняться?

    if ( c == '\n' || c == ' ' )

    Я бы добавил проверку на конец файла: if ( c == '\n' || c == ' ' || c == EOF)

    (*(nums+i))[j]

    А чего не nums[i][j]?

    int length(char s[]){

    Есть такая готовая функция strnlen из string.h

    maxNum не обрабатывает случай когда аргументы равны.
    Ответ написан
    8 комментариев
  • Как подключить header без ошибки?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему компилятор g++ пишет, что не определены конструкторы с деструкторами и метод?

    g++ main.cpp neuron.cpp layer.cpp -o test
    Ответ написан
    4 комментария
  • Как исправить undefined reference to существующей функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert

    g++ ... -I/usr/local/include/RHVoice ...
    main.cpp:(.text+0x17): undefined reference to `RHVoice_new_tts_engine'
    main.cpp:(.text+0x27): undefined reference to `RHVoice_get_voices'

    Судя по пути до каталога с заголовками нужно добавить что-то такое: -L/usr/local/lib -lRHVoice. Чтобы узнать точно, нужно посмотреть, куда установилась и как называется библиотека (*.a или *.so) RHVoice.
    Ответ написан
    1 комментарий
  • Один двумерный или два одномерных массива?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что выбрать?

    То, в чём потом не запутаешься. Потому что в массивах ты уже запутался.
    Я бы предложил один массив структур с полями для имени, фамилии и отчества.

    Что лучше выбрать с точки зрения использования памяти и производительности?

    Лучше выбрать то, в чём потом не запутаешься. Если будет тормозить -- прогнать через профилировщик и смотреть на результаты профилирования.
    Ответ написан
    Комментировать
  • Не находит std::threads. Что не так?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не находит std::threads. Что не так?

    Кто не находит? Какое сообщение об ошибке?
    Я вижу вот что:
    $ cat > thr.cpp
    #include <thread>
    using namespace std;
    void doIt(){
      //do nothing
    }
    int main(){
      thread t(doIt);
      t.detach();
      return 0;
    }
    $ g++ -std=c++11 thr.cpp -o thr
    /tmp/ccVyziLM.o: In function `std::thread::thread<void (&)()>(void (&)())':
    thr.cpp:(.text._ZNSt6threadC2IRFvvEJEEEOT_DpOT0_[_ZNSt6threadC5IRFvvEJEEEOT_DpOT0_]+0x20): undefined reference to `pthread_create'
    collect2: error: ld returned 1 exit status

    Лечится ключом -pthread:
    $ g++ -std=c++11 thr.cpp -pthread -o thr
    Ответ написан
    1 комментарий
  • Можно ли и создать экземпляр класса (с++) с проинициализированными полями?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    $ cat > test.cpp <<EOF
    class type_class {
            int field1;
            int field2;
    public:
            constexpr type_class (int f1, int f2): field1(f1), field2(f2) {
            }
    };
    extern const type_class var;
    const type_class var(12, 34);
    EOF
    $ g++ -S -O2 test.cpp
    $ cat test.s
            .file   "test.cpp"
            .globl  var
            .section        .rodata
            .align 8
            .type   var, @object
            .size   var, 8
    var:
            .long   12
            .long   34
            .ident  "GCC: (Debian 6.3.0-18+deb9u1) 6.3.0 20170516"
            .section        .note.GNU-stack,"",@progbits

    Т.е. constexpr конструктор, в результате -- готовый инициализированный объект в секции .rodata, что и требовалось.
    Ответ написан
    1 комментарий
  • Можно по-подробнее насчет функции select в сокетах?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    какие отличия recv/send от recvfrom/sendto?

    recvfrom возвращает адрес отправителя полученных данных. Имеет смысл с протоколами без соединения, типа UDP. sendto позволяет отправлять с одного сокета на разные адреса, опять же, имеет смысл с протоколами без соединения.
    В man про это написано.
    Ответ написан
    Комментировать
  • C++ как создавать обьэкты класса через указатель?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    obj->ShowID(); // Думал напишу obj[Тут номер обьэкта] и будет работать но нет...

    obj[N].ShowID();
    Если бы ты прочитал элементарную книжку по C или C++ таких вопросов бы не возникло. Потому что там написано, что запись a[b] эквивалентна записи *(a + b).

    Test *obj2= obj + sizeof (Test);
    objN= obj + (sizeof (Test) * N) ;

    Александр не нужно умножать N на sizeof (Test), компилятор сделает это сам: obj2 = obj + 1; objN = obj + N;
    Ответ написан
    2 комментария
  • Почему возникает ошибка "empty is not a member of std::locale"?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    std::locale::empty()
    Компилятор выдает ошибку "empty is not a member of std::locale"

    empty и в самом деле не является членом std::locale. Я подозреваю, что вы хотели написать
    wif.imbue(std::locale(std::locale(), new std::codecvt_utf8<wchar_t,0x10ffff, std::consume_header>));

    либо
    static std::locale empty;
    wif.imbue(std::locale(empty, new std::codecvt_utf8<wchar_t,0x10ffff, std::consume_header>));
    Ответ написан
    Комментировать
  • При компиляции undefined reference to?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Вот этот кусок кода в функции MyNtCreateFile:
    retValue = NtCreateFile(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, AllocationSize,
                                FileAttributes, ShareAccess, CreateDisposition, CreateOptions,
                                EaBuffer, EaLength);       // get return value of original function

    Напрямую обращается к NtCreateFile. Разумеется, это не будет линковаться без implib для ntdll.
    Почему было бы не использовать вместо прямого обращения к функции её адрес, полученный через GetProcAddr?
    Ответ написан
    Комментировать
  • Как включить в статическую библиотеку все зависимости из других стат.библиотек в CMake проекте?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Проект создаёт статическую библиотеку mylib, но в неё не включена требуемая реализация boost, то есть при линковке приложения с mylib нужно явно указывать, что нужно линковать boost.

    Так обычно библиотеки и делают -- ни одна нормальная библиотека не тащит с собой часть другой.
    А вот для того, чтобы указать, что у библиотеки есть зависимости используют pkg-config. Такая библиотека устанавливает в системе свой архив (*.a), свои заголовочные файлы (*.h) и описание для pkg-config (*.pc). Пользователь библиотеки вызывает pkg-config --libs <имя библиотеки>и получает список ключей для линковки.
    Ответ написан
    Комментировать
  • Как скомпилировать проект С++ под разные платформы?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    можно ли скомпилировать "hello word" на андроид, не приложив титанических усилий?

    Проще всего это сделать собрав приложение компилятором под linux на целевом CPU статически.
    Ответ написан
    Комментировать
  • Причины утечек памяии?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть вектор с экземплярами A в него заносятся как классы B так и классы C.

    Подсказывает, что объекты твои обрезаются по классу A, т.е., возможно, происходит совсем не то, что ты ожидал.
    Если нужен код могу загрузить в репозиторий.

    Загружай и показывай.
    Ответ написан
  • Использование прерываний в ОС Windows?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Возможно ли программировать под Windows, как в DOS используя функции и прерывания?

    Зависит от того, какие прерывания вы имеете в виду. Если досовский int 21h -- то в винде есть свой API, если вы имеете в виду "самому обрабатывать прерывания" -- то нужен ядерный драйвер.
    Функции использовать можно вообще везде.
    Ответ написан
  • Как получить доступ к "/dev/ttyUSB0"?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что я только не пробовал: добавлял своего пользователя в dialout

    это правильно. После добавления нужно перелогиниться (можно выйти из системы и войти, можно сделать su - $USER) -- и должно всё заработать. Для проверки -- в выводе команды groups в терминале, в котором запускается avrdude должна появиться группа dialout.

    открывал через администратора папку и назначал для ttyUSB0 права для всех на запись и чтение

    просто через консоль с помощью chmod назначал права a+rw

    разрешения назначаются автоматически когда файл устройства создаётся udev'ом.

    создавал отдельный файл, в котором описываются другие правила для этого интерфейса

    ???
    Ответ написан
    Комментировать