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

    @monah_tuk
    В том варианте, что в посте - строчите из пулемёта в себе в ноги.

    В STL есть два способа получить нужное поведение:
    ать: www.cplusplus.com/reference/string/string/getline
    два: www.cplusplus.com/reference/istream/istream/getline

    Оба прекрасно работают со стримами, но первый хочет std:string.

    Второй вариант (он же вариант из твоего поста) обычно используется с буфферами фиксированной длинны + чтение в цикле чанками.
    Ответ написан
    Комментировать
  • C++ как вызвать метод потомка, не определоного в предке?

    @monah_tuk
    Для начала: не пишите так.

    А так, если классы именно такие, то memory layout у них просто и, грубо, они указывают а одну область памяти. Поэтому поможет простое приведение:
    void foo(A& a) {
      //a.getSome(); //error: class 'A' has no member 'getSome()'
      static_cast<B&>(a).getSome(); // All ok.
    }


    Более того, у вас ещё косяк, такой код:
    B b();
    это не то, что вы подумали, это объявление функции. Всё что выглядит как функция, крякает как функция - функция. Правильно так:
    B b; // дефолтный конструктор не для POD типов вызовется и так

    или так:
    B b = B(); // Накладных расходов не будет. Будет вызван ТОЛЬКО один консутрутор. Компиляторы не совсем дураки.


    Кроме того, надеюсь, класс B описан, на самом деле, как-то так:
    class B : <b>public</b> A {
    <b>public:</b>
      int getSome();
    };

    а не так как у вас.
    Ответ написан
    1 комментарий
  • Как обратиться к файлу в Clion?

    @monah_tuk
    Проверь настройку Working directory: stackoverflow.com/questions/25834878/how-do-i-chan... смени её на каталог проекта, тогда файлы будут браться из правильного места. С учётом того, что Clion производит теневую отстройку в непредсказуемых местах, это единственно верный вариант.
    Ответ написан
    Комментировать
  • Путаница в указателях?

    @monah_tuk
    если pbeg == nullptr или *pbeg == nullptr, то (*pbeg)->t будет попыткой разыменования нулевого указателя, а то и двойной. Покажи ещё стек-трейс (команда bt в gdb), но вангую, что он приведёт к строчке:
    two = del(q);
    а в листе был всего 1 элемент.

    Ванговал не правильно, но близко:
    Если вы опубликовали правильный код, тот который реально у вас. У вас проблемы. Причём не только с указателями:
    1. createList не возвращает созданный t - на выходе будете иметь мусор
    2. не могу чётко уловить логику, но createThree тоже может в определённых условиях вернуть мусор. Судя по всему внутри должен быть не просто рекурсивный вызов:
    createThree(&tmpQ);
    а:
    return createThree(&tmpQ);
    3. касательно указателей, просмотрел, но вот этот код никогда не закончится:
    while(q) {
    потому как q ни когда не станет null, а вот *q может и становится и собственно в таком виде и передаётся в del() в строчке tmp = del(q); в результате и получаешь фейл.

    дальше у тебя там ещё, походу, баг в логике. Но это уже без меня.

    PS если не поможет - приведите минимально-работающий код, на котором воспроизводится проблема.
    PPS у вас C++, уйдите от указателей на указатели, используйте ссылки, например:
    Three* del(Node &*pbeg)
    {
        assert(pbeg != 0); // для гарантий
        Three *temp = pbeg->t; //ПОМЕЧЕННАЯ СТРОКА
        Node *pv = pbeg;
        pbeg = pbeg->p;
        delete pv;
        return temp;
    }

    И вообще, в C++: попытайтесь заменить указатели на ссылки везде где это только можно. Много нервов сбережёте.
    Ответ написан
    6 комментариев
  • Где может быть ошибка в самописном RTP сервере?

    @monah_tuk
    В отсутствии RTCP. Без него практически все клиенты/сервера рвут связь через 30сек. По крайней мере во всех случаях, что я сталкивался так и было. Если не изменяет память, 30 сек максимальный интервал отсылки RTCP.

    Попробуй поставить уровень логирования повыше или воспроизвести при помощи ffplay -v debug rtp://xxx
    Ответ написан
    Комментировать
  • Какую лучше взять книгу по C++ для начинающего?

    @monah_tuk
    Было тут: C++ для начинающих — посоветуйте книгу - неплохая подборка.

    Из тех вариантов, что у вас - вторая, как минимум из-за актуального C++11 (хотя уже и C++14 есть).

    От себя: сразу поищите рекомендации по хорошим практикам написания кода (стиль, "магические" константы и т.п.) - если привыкать изначально, легче переносится. Как окончите книжку, почитайте более детально про C++11/C++14 (начните хотя бы с википедии). Запаситесь Майерсом (последняя книга так себе, но ранние - золото). А далее уже самому будет проще ориентироваться в литературе.
    Ответ написан
    Комментировать