Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

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

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    reversecode



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    b.A::Calc(1,2,3);

    Всего записей: 1973 | Зарегистр. 06-03-2008 | Отправлено: 18:32 14-02-2021
    KChernov



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    reversecode
    Да вообще-то и так должно работать - сигнатуры же разные
     
    Добавлено:
    V0lt
    А вы какой компилятор используете?

    Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 18:38 14-02-2021
    V0lt



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нашел причину и решение.

    Цитата:
    You've already discovered that derived-class overloads will shadow (prevent the visibility of) base-class methods by the same name but different parameters. Let's just claim this was done for some historical or perceived safety reason, and look at a fix:

     
    Вот так надо переписать класс B.

    Код:
    class B : public A
    {
    public:
        using A::Calc; // expose the base-class method
     
        void Calc(int a, int b) override
        {
            value = a - b;
        }
    };

     
    Добавлено:
    KChernov

    Цитата:
    А вы какой компилятор используете?

    MSVC 19.16.27045 (Visual Studio 2017 v15.9.33)
     
    Добавлено:
    reversecode

    Цитата:
    b.A::Calc(1,2,3);

    Интересный способ, но лучше не буду.

    Всего записей: 10501 | Зарегистр. 05-02-2003 | Отправлено: 18:41 14-02-2021
    KChernov



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V0lt

    Цитата:
    Интересный способ, но лучше не буду.  

    И правильно, ибо это точно не решение проблемы

    Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 00:37 15-02-2021
    zzz528

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    код msys2 с гитхаба - очень много всего,  по этому сделал типа пример.
     

    Код:
     
    #define SOZANAH
     
    class aclass
    {
    public:
      int wewe;
      int ququ;
    };
     
    int bebe(aclass *cls){
    if(cls->wewe==SOZANAH) cls->ququ=111;
    return 0;
    }
     

     
    ошибка:

    Цитата:
     
    $ c++ test.cc
    test.cc: In function 'int bebe(aclass*)':
    test.cc:11:22: error: expected primary-expression before ')' token
     if(cls->wewe==SOZANAH) cls->ququ=111;

     
    как решить?

    Всего записей: 1653 | Зарегистр. 20-06-2005 | Отправлено: 01:35 15-02-2021 | Исправлено: zzz528, 08:57 15-02-2021
    Mavrikii

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zzz528

    Цитата:
    #define SOZANAH

    чему соответствует определение?
    #define ЧТО ЧЕМУ

    Всего записей: 15114 | Зарегистр. 20-09-2014 | Отправлено: 03:59 15-02-2021
    zzz528

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mavrikii

    Цитата:
    чему соответствует определение?

    Ничему, там много таких, мне это непонятно и само по себе это не вызывает ошибки, а если поставить любую циферку к тому #define, то и expected primary-expression уходит. Но там же ничего не поставили...

    Всего записей: 1653 | Зарегистр. 20-06-2005 | Отправлено: 09:17 15-02-2021
    Mavrikii

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zzz528

    Цитата:
    Но там же ничего не поставили...

    значит там используется другой компилятор или флаг к нему.
    ссылку дайте
     

    Цитата:
    а если поставить любую циферку к тому #define, то и expected primary-expression уходит

    потому что об этом и говорит, что SOZANAH ничему не соответствует.
     
    #define определяет выражение/значение, которое будет подставлено вместо SOZANAH везде при компиляции. если значения нет, то и подставлять/сравнивать не с чем.

    Всего записей: 15114 | Зарегистр. 20-09-2014 | Отправлено: 09:53 15-02-2021 | Исправлено: Mavrikii, 10:08 15-02-2021
    MERCURY127



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    По умолчанию дефайн же вроде 0 приравнивается...  
    #define A
    Равносильно
    #define A 0

    Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 10:17 15-02-2021
    retu2222

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    мутный этот даже чистый c, я вместе с маврикием в этом вопросе, если нечего подставлять, то ошибка вылазит...если есть что, то пропускает, логично же...но ваще бросайте этот грязный c и переходите на чистый ассемблер, меньше непоняток будет

    Всего записей: 17 | Зарегистр. 14-11-2020 | Отправлено: 10:22 15-02-2021
    Rock

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MERCURY127

    Цитата:
    По умолчанию дефайн же вроде 0 приравнивается...  
    #define A
    Равносильно
    #define A 0

    Нет, конечно. Как Вам уже объяснили, директива #define -- это часть препроцессора, а не языка. Вы можете обрабатывать сишным препроцессором хоть файлы на Питоне и все будет работать, если после препроцессора будет валидный питоновский код. #define A равносильно не тому, что Вы написали, а позволяет проверить идентификатор A с помощью директив #if defined или #ifdef. Самого идентификатора или чего-то вместо него в коде после обработки препроцессором не будет.
    Кстати, вывод препроцессора можно посмотреть (для MS VC это ключи /E или /P). Вообще странно, что такой вопрос вообще возник.

    Всего записей: 1256 | Зарегистр. 10-04-2003 | Отправлено: 15:43 15-02-2021
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый вечер. У меня вопрос по поводу использования spawn* в режиме overlay. В команду spawn передаю 3 параметра (кроме  параметра overlay для замещения текущего поцесса новым):  набор параметров командной строки через указатель new_argv  и new_env -  аналогичный список переменных окружения.
     
     Вопрос, как корректно заполнять указатели new_argv и new_env.
    Я сейчас использую самодельные объекты для хранения  строковых переменных. Данные выделяются в куче (new[] / delete[]). Естественно у объекта есть деструктор, который удаляет данные. При заполнении я тупо копирую адрес буфера объекта, содержащий строку, например, в argv[1]. Вопрос. Привильно ли это с точки зрения вызова spawn? Не произойдёт ли вызов деструктора и порча данных в буффере объекта до того, как  будет вызвана замещающая программа? Или надажнее копировать всё в стек?

    ----------
    Джин, не лезь в бутылку.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 21:23 14-05-2021 | Исправлено: nick7inc, 21:26 14-05-2021
    zzz528

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mavrikii

    Цитата:
    значит там используется другой компилятор или флаг к нему.
    ссылку дайте

    CHILD_INFO_MAGIC
     
     
    nick7inc
    в режиме overlay это типа программа откуда выполняется запуск закроется? нет справки под рукой

    Цитата:
    Не произойдёт ли вызов деструктора

    До вызова spawn нет (не должно), если данные argv[1] нужно использовать после запуска нового процесса то передать нужно их непосредственно.
     

    Всего записей: 1653 | Зарегистр. 20-06-2005 | Отправлено: 01:34 16-05-2021
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zzz528

    Цитата:
    передать нужно их непосредственно.  

    Текстовая строка хранится в автоудаляемом объекте (конструктор - new[], деструктор - delete[]). Адрес строки я передаю в
    Код:
    char new_argv**
    , который и передаётся в  spawn_overlay. Так правильно?
     
    Добавлено:
    zzz528

    Цитата:
    передать нужно их непосредственно.  

    Текстовая строка хранится в автоудаляемом объекте (конструктор - new[], деструктор - delete[]). Адрес строки я передаю в
    Код:
    char new_argv**
    , который и передаётся в  spawn_overlay. Так правильно?

    ----------
    Джин, не лезь в бутылку.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 18:57 16-05-2021
    m00slim25



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Объясните, пожалуйста, в чём разница между двумя описаниями в заголовочном файле:

    Код:
    void GetDeviceVersion(u32 index, int *major, int *minor);

    и

    Код:
    void GetDeviceVersion(u32 index, int* major, int* minor);

    И было бы просто чудесно, если бы объяснили к каким результатам может привести каждое из описаний.
     
    ЗЫ. Правильно ли я полагаю, что в первом случае я получу два числа версии, а во втором случае - нет ?

    Всего записей: 1039 | Зарегистр. 30-05-2006 | Отправлено: 21:31 16-05-2021 | Исправлено: m00slim25, 21:34 16-05-2021
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    m00slim25

    Цитата:
    в чём разница между двумя описаниями
    ни в чём, это одно и то же описание...

    Цитата:
    Правильно ли я полагаю, что в первом случае я получу два числа версии
    и получишь ты одно и то же...

    Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 15:45 19-05-2021
    zzz528

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nick7inc

    Цитата:
    Текстовая строка хранится в автоудаляемом объекте

    и когда программа закроется он удалиться, что в этом месте будет потом не понятно. Нужно занимать память отдельно, например maloc, все нужные данные копировать в неё и передавать адрес памяти в argv, далее в новой программе освобождать эту память когда уже не нужно. Думаю можно с объектом так тоже, создать в старой прогамме - передать адрес в argv, а потом удалять его из новой программы.

    Всего записей: 1653 | Зарегистр. 20-06-2005 | Отправлено: 17:14 19-05-2021
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zzz528

    Цитата:
    когда программа закроется он удалиться

    Я проверю, деструтор вообще срабатывает или нет (при использовании _P_OVERLAY).
    А так - стратегию понял. Спасибо.
    P.S. Жалко, что непонятно, делает ли вызываемая программа копию argv или тупо использует переданные ей адреса.

    ----------
    Джин, не лезь в бутылку.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 07:28 21-05-2021 | Исправлено: nick7inc, 07:32 21-05-2021
    bomzz

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    всем привет.
    подскажите плиз, в батниках есть перенаправление потоков,
    чтоб консольное приложение принимало направленный в него поток,
    как надо делать?  
     
    в принципе получилось методом тыка

    Цитата:
    echo %%a<hello.exe
    dir <hello.exe
    type 1.txt<hello.exe
    for /f "delims=" %%a in (1.txt) do echo %%a<hello.exe

    только почему то только так поток перенаправляется

    Всего записей: 3412 | Зарегистр. 29-03-2016 | Отправлено: 17:12 23-06-2021 | Исправлено: bomzz, 17:22 23-06-2021
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzz
    Причём тут  си?...
    В консоли перенаправление выхлопа одного приложения на вход другого делается через "трубу" ( "|", символ с кодом 124).
    Код:
    REM Поиск "искомый фрагмент" командой find в выводе команды type
    type "readme.txt" | find /i "искомый фрагмент"
    Но нормально оно будет работать только в том случае, если принимающее приложение умеет работать со входным потоком. Если не умеет - входящий поток будет тупо проигнорирован...

    ----------
    http://www.imho.ws

    Всего записей: 2403 | Зарегистр. 12-10-2006 | Отправлено: 17:49 23-06-2021
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru