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

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

  1. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    iZzz32
    Меня малость клинит ^), конечно в реализации он предпочтительнее. А ещё предпочтительнее он в stdafx.h.
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    MirrorBlack

    Это приведет к тому, что WinAPI будет торчать наружу у всех пользователей класса IClass. Но это уже тема следующего урока :derisive:
     
  3. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    MirrorBlack, посмотри, тут volodya писал про политику включения хедеров.
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    iZzz32

    Скомкано, непоследовательно и не везде по сути. Тема сисек не раскрыта. Лучше бы эту статью писал сам Антон. Хотя тоже не факт.
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    +1500

    Про это очень скомкано - "hpp vs h, precompiled header, #pragma once". А дьявол как известно в деталях.
     
  6. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    разъясните следующее Си объявление, плз:
    Код (Text):
    1. char *(*(*с()))[10];
    спасибо.
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Код (Text):
    1. char *(*(*с()))[10];
    _http://www.kalinin.ru/programming/cpp/17_07_00.shtml

    "c" есть функция, возвращающая указатель на указатель на массив из 10 указателей на char.

    Код (Text):
    1. char *(*(*с()))[10]
    2. {
    3.     char* p[10];
    4.     char* (*p1)[10] = &p;
    5.     char* (**p2)[10] = &p1;
    6.     return p2;
    7. }
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Код (Text):
    1. "ComeauTest.c", line 1: error: unrecognized token
    2.   char *(*(*с()))[10]
    3.             ^
    4.  
    5. "ComeauTest.c", line 1: error: expected an identifier
    6.   char *(*(*с()))[10]
    7.             ^
    8.  
    9. 2 errors detected in the compilation of "ComeauTest.c".
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Кстати, указателя на массив не бывает.
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Ты так уверен, что комею идеал? VS 2005 спокойно глотает, и по-моему вполне нормальная конструкция.

    А это что - "char* (*p1)[10]"?
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Даю ящик пива за каждую багу, которую ты найдешь в камю.


    Тоже мне критерий.


    А вот это просто железобетонный аргумент)))))))))))


    Указателя на массив не бывает, поскольку само имя массива - это адрес первого элемента. Чтобы был указатель на массив, нужно чтобы был адрес на адрес первого элемента. Но адрес первого элемента сам по себе нигде не хранится, чтобы от него можно было взять адрес.
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Особенно учитывая тот факт, что этого компилятора у меня нет и скорее всего никогда не будет, а проверка синтаксиса С++ это не повод для того, чтобы рвать на себе рубаху доказывая свою правоту, так как всё течет и всё меняется.

    Я бы даже сказал, что железобетонный. ^)

    Конечно нет, но вкупе со здравым смыслом, который мне подсказывает, что ничего криминально в этой конструкции нет.

    По-моему здесь некоторая путаница в понятиях. Массив это область памяти некоторого кол-ва элементов. Указатель на массив есть адрес его первого элемента(или адрес памяти занимаемой массивом), и не как не адрес адреса. А то что в С++ имя массива разлагается в указатель на массив, так это просто фича С++. И для того чтобы взять указатель, нигде его хранить необязательно, нужно просто его взять(вычислить). С другой стороны можно сказать, что и в правду указателя на массив не существует, и что даже самих массивов нет. Но это по-моему не более чем казуистика, и попытка смотреть на вещи только под одним углом зрения.
     
  13. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Подскажите где собака порылась...
    static HWND hSB;
    hSB=CreateStatusWindow(WS_CHILD | WS_VISIBLE, L"Text", hWnd, -1);

    Как результат:
    error LNK2019: ссылка на неразрешенный внешний символ __imp__CreateStatusWindowW@16 в функции "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)

    #include <CommCtrl.h> в stdafx.h есть.
     
  14. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    comctl32.lib есть в либах в проекте? :derisive:
    ЗЫ: оффтоп: InitCommonControls тоже забыл, наверное? :derisive:
     
  15. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    iZzz32
    Забыл конечно :) Вместо неё InitCommonControlsEx
    конечно нет. По дурости думал что VS++ сам добавит.
     
  16. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Подскажите, почему код не выполняется:
    RECT rect;
    RECT rectWnd;

    ....
    rectWnd.top = rect.bottom;
    Компилятор ошибок не даёт...
     
  17. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Типа выяснил, что если RECT локальные (в стеке висят), то не работает.
    А с глобальными работает.
    Дурацкий вопрос - почему?
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    MirrorBlack
    Скорее всего тебе нужно глобальное поведение. ^)
     
  19. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    MirrorBlack
    чтобы локальные переменные сохранялись между вызовами функции пиши перед ними static.
     
  20. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Booster
    Извиняюсь, ничего не понял...

    Y_Mur
    static - это понятно.
    Но здесь вопрос не в том, что между вызовами.
    Всё крутится в одной процедуре:
    GetClientRect(hStatusBar, &rect);
    GetClientRect(hWnd, &rectWnd);
    rectWnd.top = rect.bottom; И эту срочку компилятор VC++ 2008 вышвыривает :-(