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

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

  1. verelex

    verelex New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2006
    Сообщения:
    90
    Booster спасибо за помощь =)
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    ыыы. справится, как только дождется события от суспендед процесса :)
     
  3. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Freeman Неплохой аналог "когда рак на горе свистнет" на программерский манер ))
    Запишу себе.
     
  4. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Booster
    Это чтобы было видно - с какими опциями (define'ы) компилируется программа. Через опции можно, но не в опциях записано UNICODE.
    А я им разве не пользуюсь? Параметры CreateProcess передаются верно, но раз не работает, значит - все-таки неверно.
     
  5. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    AndreyMust19 ]
    Все-таки пора бы сменить установку "Чем хуже, тем лучше" (подпись).
     
  6. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Ну так и есть. Разобрался <:) Я ж забыл - второй параметр должен распологаться там, где есть право на запись. То есть в функцию передается адрес константной строки из секции данных только для чтения. Поэтому то и Access Violation. Стало быть - ее надо скопировать в локальный буфер (на стеке) или в статичный массив функции (в секции данных для записи). Я сделал первый вариант и... заработало! Но вот непонятно - зачем CreateProcess нужно право на запись в переменную? Он что, изменяет ее содержимое?
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    AndreyMust19
    А почему бы не обратиться к MSDN? http://msdn.microsoft.com/en-us/library/ms682425.aspx
    Я искренне рад.
     
  8. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Можно ли в Си++ создать указатель, который будет ссылкой на другой указатель? Например, нужно так:
    Код (Text):
    1. ListItem * NewItem;
    2. //...
    3. unsigned char * & Ptr_char = NewItem;
    Надо это затем, чтобы в исходнике было меньше приведений.
    Использовать тип (void *) в указателе, вместо создания ссылки - не предлагать, иначе каждый раз перед указателем придется писать приведение к нужному типу. Может вместо ссылки проще использовать объединение?
    Код (Text):
    1. union {
    2.    char * Chr;
    3.    ListItem * LItem;
    4. } Ptr;
     
  9. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Указатель на указатель штоле? char**
    Я уже привык...
    Подними глаза на страницу выше. Там похожий вопрос от моего лица.
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    AndreyMust19
    В C++ есть операторы приведения.
    Код (Text):
    1. class T
    2. {
    3. public:
    4.     operator char*()
    5.     {
    6.         return c;
    7.     }
    8.     operator int*()
    9.     {
    10.         return (int*)c;
    11.     }
    12.     char *c;
    13. };
    14.  
    15. int main (int argc, char* argv[])
    16. {
    17.     T t;
    18.     char *c = t;
    19.     int *i = t;
    20. }
    В Си конечно приходиться обходиться объединениями.

    Aspire
    По-моему тебе ясно сказали, что твоя оптимизация вымышленная.
     
  11. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Booster
    Вымышленная. Я что, протев штоле?
     
  12. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Aspire
    Нет. Можно создавать ссылки на другие переменные, так сказать, дополнительные имена:
    Код (Text):
    1. unsigned char & P1 = P2;
    А можно ли таким способом создать второе имя у указателя, но чтобы это имя было другого типа. Или проще записать обя указателя в union?
     
  13. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    AndreyMust19
    Код (Text):
    1. char *c = new char;
    2. int *&i = (int*&)c;
    3. *i = 5;
     
  14. verelex

    verelex New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2006
    Сообщения:
    90
    Имеется
    Код (Text):
    1. #include <list>
    2. using namespace std;
    3. typedef list<pair<int,wstring>> LISTPAIRINTSTR;
    потом добавляю в класс этот лист
    Код (Text):
    1. class CChildFrame : public CMDIChildWnd
    2. {
    3. ...
    4. public:
    5.     LISTPAIRINTSTR lpis;
    6.     LISTPAIRINTSTR::iterator iter;
    7.  
    8. ...
    Код (Text):
    1. CChildFrame::CChildFrame()
    2. {
    3.     iter = lpis.begin(); // оба нули (при отладке)
    4. }
    первый вопрос: как мне проинициализировать лист и итератор, чтобы != 0.
    наверное что-то типа lpis = new LISTPAIRINTSTR ?
    второй вопрос: как занести строку в list-pair-second из BSTR?
    пробывал так:
    iter._Mynode()->_Myval.second.append(bstrVal);

    3) строка динамически создается или там адрес от bstr?
     
  15. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Если в списке нет элементов, то lpis.begin() будет равен lpis.end(). Зачем нужен такой итератор? Этот список вначале нужно заполнить элементами. Итераторы имеет смысл получать тогда, когда они непосредственно нужны, так как при изменении контейнера итераторы тоже меняются.

    Так не делается. Делается примерно так.

    Код (Text):
    1. #include <iostream>
    2. #include <windows.h>
    3. #include <list>
    4. #include <string>
    5.  
    6. typedef std::list<std::pair<int,std::wstring> > LISTPAIRINTSTR;
    7.  
    8. int main (int argc, char* argv[])
    9. {
    10.     BSTR str(L"Hello!");
    11.     LISTPAIRINTSTR::iterator iter;
    12.     LISTPAIRINTSTR lst;
    13.     std::pair<int, std::wstring> pr(0, str);
    14.     lst.push_back(pr);
    15.     iter = lst.begin();
    16. }
    Если std::pair<int,std::wstring>, то конечно у класса строки будет всегда своя копия.
     
  16. verelex

    verelex New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2006
    Сообщения:
    90
    спасибо
     
  17. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Booster, то есть надо вот так писать:
    Код (Text):
    1. int *& A = (int*&) B;
    , а не вот так?
    Код (Text):
    1. int *& A = (int*) B;
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    AndreyMust19
    Ты же приводишь к ссылке на указатель, а не к указателю.
     
  19. verelex

    verelex New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2006
    Сообщения:
    90
    Как скопировать один std::list в другой? list1.copy(list2)
    Есть какие-то методы или в цикле копировать с помощью итераторов?
    и pair тоже. pair1.copy(pair2)?
     
  20. censored

    censored New Member

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