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

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

  1. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    туда же всю хренотень от микрософт... в итоге, вместо языка С++ имеешь дело с какой-то (мат опущен), работая в том же визуал С++...
    то, панимаеш, strcpy им не секурная, то пятое десятое :)))
     
  2. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    Только почему-то один момент обошли стороной. С подчеркиваний начинаются даже например имена параметров функций стандартной библиотеки, что в общем-то немного раздражает. Так что совсем даже не обязательно из бездны :)
    ИМХО это сделано для того, чтобы всякие программеры своими кривыми дефайнами не мешали компилироваться хедерам стандартной библиотеки.
     
  3. Derebuser

    Derebuser New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    11
    Помогите, пожалуйста, разобраться:
    Код (Text):
    1. #include <windows.h>
    2.  
    3. #define DLG 1000
    4.  
    5. BOOL CALLBACK DlgProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
    6.  
    7. int STDCALL WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nShow)
    8. {
    9.  DialogBoxParam (hInst,
    10. DLG,
    11. NULL,
    12. DlgProc,
    13. 0);   //в этой строке ошибка
    14.  return 0;  
    15. }
    16.  
    17. BOOL CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    18. {
    19.    return FALSE;  
    20. }
    При попытке скомпилить, Dev-c++ пишет, что "invalid conversion from 'int' to 'const CHAR*'"
    в вышеуказанной строке.
    Ничего не понимаю...
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    (LPCSTR)DLG или MAKEINTRESOURCE(DLG)
     
  5. Bigbudx

    Bigbudx New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2008
    Сообщения:
    1
    неполучается скомпилировать на MS VC++ 2008 beta2 все делал по инструкции книг по си
    может мне кто помочь разобраться

    ------ Build started: Project: rrr, Configuration: Debug Win32 ------
    Compiling...
    cl : Command line warning D9038 : /ZI is not supported on this platform; enabling /Zi instead
    cl : Command line warning D9007 : '/Gm' requires '/Zi'; option ignored stdafx.cpp
    c1xx : fatal error C1048: unknown option 'L' in '-ZILP448'
    Build log was saved at "file://c:\Documents and Settings\bigbudx\Мои документы\Visual Studio 2008\Projects\rrr\rrr\Debug\BuildLog.htm"
    rrr - 1 error(s), 2 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
     
  6. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Bigbudx
    Отключить опции L и /Gm? %)
     
  7. Benzin

    Benzin Сергей

    Публикаций:
    0
    Регистрация:
    26 авг 2007
    Сообщения:
    41
    Адрес:
    St.Petersburg
    Derebuser DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG), hwnd, (DLGPROC) DlgProc );
     
  8. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Не могу вот понять как правильно получить доступ из дружественной функции класса А к статическуму члену обьявленому в пространстве private класса А.
    например
    Код (Text):
    1. class A
    2. {
    3. private:
    4. static DWORD dwVar;
    5. friend void WantAccess();
    6. public:
    7. A(){};
    8. ~A(){WantAccess();};
    9. };
    10. DWORD A::dwVar;
    11.  
    12. void WantAccess()
    13. {
    14.    A::dwVar = 1;//error C2248 "Cannot access private member declared in class 'A' "
    15. }
    16.  
    17. void main()
    18. {
    19.    A *a = new A;
    20.    delete a;
    21. }
    нужна подсказка как вот это выполнить

    спасибо
     
  9. _DEN_

    _DEN_ DEN

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

    friend void WantAccess(); Не является определением. Вынеси наверх класса строку

    void WantAccess();

    Если ошибка не исчезнет, то отнеси компилятор на помойку. Кстати можешь его отнести уже сейчас, потому что в твоем примере должно быт не "Cannot access private member", а "WantAccess - undeclared indentifier"
     
  10. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    _DEN_
    что то ты не то пишешь
    не понял что значит твое
    вобщем помогите разобраться кто понял в чем суть вот этого поста
     
  11. _DEN_

    _DEN_ DEN

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

    Прошу прощения, объявлением, а не определением.


    Что-то ты не то говоришь. Суть в том, что у тебя функция используется до того, как она объявлена. Прежде чем ее использовать, ее надо объявить. Например так:

    Код (Text):
    1. void WantAccess();
    2.  
    3. class A
    4. {
    5. private:
    6. static DWORD dwVar;
    7. ...........
     
  12. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    _DEN_
    короче эта функция нормально работает, как объявленная френдом внутри класса А,
    пока я не начинаю получать из нее доступ к статическому члену объявленному в блоке private класса А
    Если не сложно дай свой номер icq
     
  13. _DEN_

    _DEN_ DEN

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

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    UTeX
    _DEN_
    Вообще-то ошибки в примере нет... должно компилиться. А DWORD где-нибудь определяется? :)
     
  15. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Ustus
    ошибка уже обнаружена
    в этом коде нет, т к это был лишь упрощенный пример для того чтобы показать что конкретно не работает

    а ошибка была в объявлении функции friend - я в определении и объявлении порядок следования параметров спутал (, т е вышло что я определил новую функцию а не указанную в объявлении класса
     
  16. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    UTeX
    Что за компилятор? VC 7.1 собирает без замечаний, как и comeau.

    _DEN_
    А разве friend void ... не является объявлением этой функции "для класса"?
     
  17. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    IceStudent

    Насчет comeau не знаю, т к впервые услышал это название час назад (теперь буду знать)

    Ошибка такого плана была

    Код (Text):
    1. //объявление
    2.  
    3. class CXWnd
    4. {
    5.    //...
    6.    private:
    7.       friend LRESULT __stdcall CXWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
    8.       static PWCHAR someshit;
    9.    //...
    10. };
    11.  
    12. //определение
    13. LRESULT __stdcall CXWndProc(HWND hwnd, UINT msg, LPARAM wparam, WPARAM lparam)//<<---
    14. {
    15.    //ну и при доступе к someshit соответственно ошибка и всплывала, т к данная функция не есть другом CXWnd из-за того что сигнатура левая
    16. }
     
  18. _DEN_

    _DEN_ DEN

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

    Такого понятия как "объявление для класса" нет. Объявление либо есть, либо его нет.

    Код (Text):
    1. class A
    2. {
    3.     friend void foo(); // foo дружествена для A, но это НЕ ее объявление.
    4.     static int x;
    5.  
    6.     A()
    7.     {
    8.         foo(); // Ошибка, foo не видна.
    9.     }
    10.  
    11.     ~A();
    12. };
    13.  
    14. int A::x = 1;
    15.  
    16. A::~A()
    17. {
    18.     foo(); // Ошибка, foo все еще не видна.
    19. }
    20.  
    21. void foo()
    22. {
    23.     A::x = 4;
    24. }
    25.  
    26. int main()
    27. {
    28.     foo(); // foo() видна, все ок.
    29.     return 0;
    30. }
    UTeX

    Я допустил неточность. В одном из твоих примеров ты как раз вызывал функцию в деструкторе до ее определения. Вынести объявление перед классом нужно было для устранения именно этой ошибки. Остальное устранялось перестановкой WPARAM и LPARAM. Однако если был friend без объявления, то последующее определение подцепляется корректно.
     
  19. Ivan_assm

    Ivan_assm New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2007
    Сообщения:
    132
    Адрес:
    Везде и нигде
    Нужно из одной функции перейти на метку, которая находится в другой функции.
    как это можно сделать?
     
  20. censored

    censored New Member

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