Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
  2. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    всем привет.

    столкнулся с след. трудностью.
    имеется код:
    Код (Text):
    1.    
    2.     struct point2d
    3.     {
    4.     int x;
    5.     int y;
    6.     point2d( int xVal, int yVal): x(xVal), y(yVal);
    7.         point2d(const point2d& rhs)
    8.     {
    9.         x = rhs.x;
    10.         y = rhs.y;
    11.     }
    12.     };
    13.  
    14.     class CObject
    15.     {
    16.     public:
    17.         explicit CObject(const point2d &pos, const CTexture *const pTexture, const uint spriteNum = 0);
    18.         //etc
    19.         protected:
    20.         point2d  _pos;
    21.         CSprite  *_pSprite;
    22.     };
    в CObject.cpp его конструктор реализован так:
    Код (Text):
    1.    
    2. CObject::CObject(const point2d &pos, const CTexture *const pTexture, const uint spriteNum)
    3.     try
    4.     {  
    5.     : _pos(pos),
    6.       _pSprite(new CSprite(pTexture, spriteNum))
    7.     }
    8.     {}
    9.     catch( ... )
    10.     {
    11.     throw gameError();
    12.     }
    на что получаю еррор от при компиляции:
    если же из member initializer list у конструктора выше убрать блок try/catch, то все компилится на ура.

    это моя ошибка или что?
     
  3. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    varnie
    a дефолтный конструктор для point2d есть?

    Вообще какая-то конструкция странная, имхо все-таки она неверная.
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    изврат конечно
    Код (Text):
    1. #include <memory>
    2. #include <exception>
    3.  
    4. class point2d {
    5.   int x, y;
    6. public:
    7.   point2d() : x(0), y(0) {;}
    8.   point2d(int x, int y) : x(x), y(y) {;}
    9.   point2d(const point2d & rhs) : x(rhs.x), y(rhs.y) {;}
    10. };
    11.  
    12. class cObject {
    13. public:
    14.   explicit cObject(const point2d & pos);
    15. protected:
    16.   point2d pos;
    17. };
    18.  
    19. cObject::cObject(const point2d & pos_) {
    20.   try {
    21.     new (&pos) point2d(pos_);
    22.   } catch (std::exception & e) {
    23.     e;
    24.   }
    25. }
    26.  
    27. int main() { cObject obj(point2d(1, 0)); }
     
  5. creeper

    creeper New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    132
    Бу! http://wasm.ru/forum/viewtopic.php?pid=217250#p217250
    Как это хоть делают нормальные люди?
     
  6. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    creeper
    в плоском С getch(e) использовалось.
     
  7. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    censored,
    спасибо за помощь.
    добавил дефолтный конструктор для point2d как вы уточнили выше, и еррор с конструктором point2d исчез.
    сейчас глянул в книгу от Страуструпа, и выяснил таки, каков правильный синтаксис у member initializer list, если он заворачивается в try/catch блок.
    в соответствии с этим мой пример выше будет правильно переписан так:
    Код (Text):
    1.     CObject::CObject(const point2d &pos,  const uint width, const uint height, const CTexture *const pTexture, const uint spriteNum)
    2.     try
    3.         : _pos(pos),
    4.           _pSprite(new CSprite(pTexture, spriteNum))
    5.    
    6.     {
    7.     }
    8.     catch( ... )
    9.     {
    10.         throw gameError();
    11.     }
    пардон, что я сразу к Страуструпу не заглянул.
     
  8. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    varnie
    Это как раз тот случай, когда лучше бы он не исчез :dntknw: код-то неправильный получится...
     
  9. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    Ustus,
    дело было даже не в дефолтном конструкторе в моем случае, а в неверном синтаксисе для try/catch для member initializer list. видимо, я в своем посте #427 сразу не так выразился, извините.
    в этом куске кода никогда не получится вызвать дефолтный конструктор для point2d, т.к.:
    1. не указано дефолтное значение для параметра констуктора const point2d& pos
    2. извне, в коде, везде при инициализации объекта класса CObject я указываю явные аргументы для конструктора point2d.
    , так что все оки.
     
  10. creeper

    creeper New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    132
    censored
    Thanks, man! :) Все прекрасно работает
     
  11. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    creeper
    еще вариант вспомнил :) system("pause"); :)
     
  12. Keva

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    Есть один массив типа BYTE, в нем может содержаться до 200 мегабайт символов. Как мне организовать передачу этих данных некоторой функции по 4096 байт?
     
  13. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Kusochkami
     
  14. creeper

    creeper New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    132
  15. Keva

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    censoredСпасибо
     
  16. Keva

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    Может кто помоч с представлением исходника, пост 432. Буду очень признателен.
     
  17. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Код (Text):
    1. extern void foo(char * small_buffer);
    2. char * buffer;
    3. size_t offs = 0, size = 200 * 1024 * 1024;
    4. while (offs < size) {
    5.    foo(&buffer[offs]);
    6.    offs += 4096;  
    7. }
     
  18. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    еще по идее нужно не забыть в ф-ции foo(char *) при обработке полученных данных учесть, что указатель можно смещать не далее чем на 4096-1 от позиции small_buffer, а то он уже пойдет плясать по данным следущего куска.
    и также иметь ввиду, что в этой ф-ции при изменении данных на которые указывает указатель будут меняться сами исходные данные, и ни что иное.
    ну, это я на всякий случай пояснил, может пригодится вопрошающему:)
     
  19. Keva

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    Подсажите что значат вот эти замысловатые конструкции?
    Код (Text):
    1. *(pbData+cbData) = 0;
    2. DecryptPara.dwRecipientIndex = (DWORD)-1;
     
  20. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    запись нуля по адресу pbData+cbData

    Запись -1 (видимо 0xFFFFFFFF раз префикс dw) в поле dwRecipientIndex структуры DecryptData