[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. FoV

    FoV New Member

    Joined:
    27 Sep 2008
    Messages:
    15
    Likes Received:
    3
    Reputations:
    0
    В c++ нет встроенного гуя,тебе нужно взять какую-нибудь сторонню библеотеку: mfc,winforms,qt..
    Если под винду подойдет winforms.Создавай в студии проект Windows Form Applications,кинь на форму кнопку и текст бокс.В обработчике нажатия на кнопку пиши что нужно сделать.Текст из текст бокса находится в this->textBox1->Text.
    p.s. еще вариант на винапи написать.
     
  2. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    в проге выводятся три значения, я кинул на форму тексбокс, кнопку и 3 лейбла
    вопрос номер рас: куда вписывать код, создавать есче один файл СРР ?
    2) как прасвоить выводимые данные к лейблам?
    3) как считать данные из текстбокса ?
     
  3. FoV

    FoV New Member

    Joined:
    27 Sep 2008
    Messages:
    15
    Likes Received:
    3
    Reputations:
    0
    this->label1->Text = "blabla"; Если нужно не текст присвоить юзай метод toString() - this->label1->Text = n.ToString();
    System::String s = this->textBox1->Text;
     
  4. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    error C3149: System::String: нельзя использовать здесь этот тип без "^" верхнего уровня

    :(
     
  5. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    не пойдет, ибо winforms это либса не под с++ а под managed c++
    по сабжу юзай qt, mfc, wtl, etc.
     
  6. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    как прочитать значение из текстбокса, выполнить над ним какуюнить операцию и вывести результат в лейбл, если можно то дайте самы простой исходник
     
  7. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Своего или чужого? В какой среде?
     
    _________________________
  8. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    короче есть код (консоль) нужно сделать граф. интерфейс. VS 2008. если есть то плиз пример, а есче лучше пример на основе этого кода :)

    Code:
    #include <stdio.h>                      
    #include <stdlib.h>                    
     
    int main(void)                         
    {
      int i;                              
      char buffer[500];                    
     
      printf("Enter a number: ");           
      scanf("%o", &i);     
     
      itoa(i,buffer,10);                    
      printf("decimal: %s\n", buffer);     
     
      itoa(i,buffer,16);
      printf("hexadecimal: %s\n", buffer);  
     
      itoa(i, buffer, 2);                  
      printf("binary: %s\n", buffer);
      return 0;                            
    }
    т.е. для начала нужно заменить вот это:

    Code:
    printf("Enter a number: ");           
      scanf("%o", &i);   
    но тут уже нужно взять то что написано в текстбоксе и дальше выполнять действия, вопрос, как это сделать ?
     
    #2968 s_p_a_m, 17 May 2009
    Last edited: 17 May 2009
  9. kRa$I-I

    kRa$I-I New Member

    Joined:
    23 Jan 2009
    Messages:
    30
    Likes Received:
    1
    Reputations:
    5
    Всем привет!
    Недавно начал изучать C++, возник такой вопрос:

    #include <iostream>
    #include <windows.h>

    using namespace std;

    int main(){
    char *szMess = new char;
    szMess = "Hello World!";
    cout << szMess;
    Sleep(3000);
    return 0;
    }

    Как это возможно? Я так понимаю здесь объявляется указатель szMess на переменную типа char и определяется адресом выделенным под переменную char (new char). Ну это ладно....но как потом он проглотил присваивание указателю строки символов, дык еще и вывел их оператором cout << szMess;
    Я наверное чет не так понимаю, но мне кажется должно быть так

    char *szMess = new char;
    *szMess = "Hello World!";
    cout << *szMess;

    Но на такую запись он ругается! Объясните новичку че к чему. Заранее спасибо.
     
    #2969 kRa$I-I, 17 May 2009
    Last edited: 17 May 2009
  10. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Code:
    char *szMess = new char; //нормально, делаем указатель
    *szMess = "Hello World!"; //тут этот укзаатель начинает указывать на область памяти по адресу "Hell", т.к. указатель - это DWORD=4 байта. Видимо, мы хотим достать демонов из ада
    cout << *szMess; //а вот тут-то и ошибка. чтобы достать демона, надо * убрать. Тогда мы призовем всех демонов до первого встретившегося люцифера (нулевого байта)
    //Хотя может ты просто хочешь спалить местоположение врат ада
    
     
    _________________________
    2 people like this.
  11. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    итак. вариант номер один. эквивалентен записи
    Code:
    cout <<  "Hello World!";
    ибо ты выделяешь только 1 байт, что явно не достаточно для строки длиной 13 байт. ты благополучно затираешь выделенный указатель указателем строки хелловорлд, тем самым создавая утечку памяти. по сути ты просто выводишь используя указатель на хуллоуворлд.

    вариант два. опять мало байтов. выделен только один. сделав * ты получил доступ к байту, но пытаешься запихнуть туда строку. правильный вариант этой строки *szMess="Hello World!"[0]; Но это опять же не верно, если ты хочешь засунуть туда строку
    Правильный вариант

    Code:
    #define HELLO_MSG "Hello World!"
    int main()
    {
    	char *szMess;
    	szMess= new char [strlen(HELLO_MSG) + 1];
    	strcpy(szMess, HELLO_MSG);
    	cout << szMess;
    
    	return 1;
    }  
     
    1 person likes this.
  12. kRa$I-I

    kRa$I-I New Member

    Joined:
    23 Jan 2009
    Messages:
    30
    Likes Received:
    1
    Reputations:
    5
    to Kaimi Спасиб....я все понял....просто такой некорректный пример видел в одной статье... после Object Pascal совсем мозг не хочет принимать такие ньюансы работы с памятью.....я уж привык, что string это строка и пиши туда че хочешь и сколько влезет.

    to Fatal1ex спасиб за перевод конечно но символ взятия адреса & , а *-разименовывание.

    to Ra$kal Очень подробный содержательный ответ спасибо.

    И все таки как взять строку из textBox если заранее ее длина неизвестна?

    И вообще кто-нибудь может объяснить мне разницу между System::String ^ , string(из инклуда <string.h>) char * и char! Это меня уже 3 день в ступор вводит....
    И че это за оператор подозрительный ^; не нравится он мне :)
     
    #2972 kRa$I-I, 18 May 2009
    Last edited: 18 May 2009
  13. FoV

    FoV New Member

    Joined:
    27 Sep 2008
    Messages:
    15
    Likes Received:
    3
    Reputations:
    0
    Чем конкретно для его задачи не подходит managed c++?
     
  14. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Да для его задачи подойдет почти любой язык, но дело не в этом. Я считаю что не стоит сразу привязываться к определенному фреймворку и к бесперспективной надстройке над с++. Лучше будет сначала выучить нативный синтаксис языка + средства сторонних библиотек. Вообще лучше уж сразу писать на C# чем на managed c++.

    В с++ не красиво юзать char* строки, уже лучше воспользоваться STL классом string

    System::String это класс с .Net'a, а не нативный, как я указал выше используй std string который входит в стандартную библиотеку и являеться кроссплатформенным классом.
     
    1 person likes this.
  15. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    Дайте пожалуйста мануал по С++ функциям для файловой системы. Тоесть ls всех файлов/папок, нахождение пути к системным папкам, нахождения пути к запущеному файлу и т д. С меня плюсы. Спасибо
     
  16. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    Таак...
    Пытаюсь скомпилить с -static , но чото не идет дело.
    В pkg-config указываю параметр --static. Т.е. запрос такой:
    pkg-config --libs-only-L --static --cflags gtkmm-2.4
    В параметры g++ добавил -static.
    Добавил -lgtkmm-2.4.dll ( .dll это только название, на самоме деле gtkmm-2.4.dll.a) и др. с библиотеки GTKmm 2.4.
    Компиляция вроде все норм завершилась, но .ехе весит пол метра и все равно просит библиотеки ;{
     
  17. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Посмотри от каких именно библиотек идут зависимости.
     
  18. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    C:\GTK\bin\libgdk-win32-2.0-0.dll
    C:\GTK\bin\libpangomm-1.4-1.dll
    C:\GTK\bin\zlib1.dll
    C:\cygwin\bin\cygwin1.dll - эта пофиг.
    C:\GTK\bin\libgtk-win32-2.0-0.dll
    C:\GTK\bin\libcairomm-1.0-1.dll
    C:\GTK\bin\libatk-1.0-0.dll
    C:\GTK\bin\libgobject-2.0-0.dll
    C:\GTK\bin\libgdk_pixbuf-2.0-0.dll
    C:\GTK\bin\libpango-1.0-0.dll
    C:\GTK\bin\libglibmm-2.4-1.dll
    C:\GTK\bin\libglib-2.0-0.dll
    C:\GTK\bin\libcairo-2.dll
    C:\GTK\bin\libpng12-0.dll
    C:\GTK\bin\libgdkmm-2.4-1.dll
    C:\GTK\bin\libsigc-2.0-0.dll
    C:\GTK\bin\libpangowin32-1.0-0.dll
    C:\GTK\bin\libgiomm-2.4-1.dll
    C:\GTK\bin\libgtkmm-2.4-1.dll
    C:\GTK\bin\libpangocairo-1.0-0.dll
    C:\GTK\bin\libgio-2.0-0.dll
    C:\GTK\bin\libgmodule-2.0-0.dll
    C:\GTK\bin\libatkmm-1.6-1.dll

    Как я понимаю вы это просили? Ну избавиться я хочу от них, т.е. статически слинковать. Я понимаю, что так все статически слинкуется, вообще все, даже те , что уже есть в системе, но у меня даже так не получается.
     
  19. kRa$I-I

    kRa$I-I New Member

    Joined:
    23 Jan 2009
    Messages:
    30
    Likes Received:
    1
    Reputations:
    5
     
  20. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    Почитай сначала это
    Не вижу смысла повторять то, что уже написано, и не раз написано. Про String^ забудь. Это не чистый с++. Помесь с++ и дотнета. Оно тебе все равно рано.
     
Thread Status:
Not open for further replies.