Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [wx] Создание динамического массива виджетов, Прога падает при обращении к виджету 
V
    Опции темы
Fabio
Дата 24.9.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



Доброго времени суток, форумчане!

Столкнулся со следующей проблемой:
Пытаюсь создать на wxPanel "таблицу" из wxTextCtrl, допустим 15x7 (не спрашивайте зачем и не
предлагайте wxGrid, сам про него знаю, просто вопрос - дело принципа).
Сама wxPanel располагается в wxFrame, т. е. стандартное "борландовское" окошко-диалог smile
Обьявлять 105 указателей вручную мне не очень улыбается, поэтому пришла идея создать
двухмерный динамический массив указателей на wxTextCtrl, и в конструкторе wxFrame распределить
под них память. Вот как это у меня выглядит:
Код

// объявление наследника wxApp и т. д.
...

class MyFrame : public wxFrame
{
public:
  MyFrame(const wxString &title, const wxSize &size, long style);
  void SomeMethod();
private:
  wxPanel *panel;
  wxTextCtrl ***table;
  wxBoxSizer *container, **columns;
};

MyFrame::MyFrame(const wxString &title, const wxSize &size, long style)
         : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, size, style)
{
  int i, j;
  panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(800, 250), wxTAB_TRAVERSAL);

  //==== создание массива полей ввода =======
  table = new wxTextCtrl **[7];
  container = new wxBoxSizer(wxHORIZONTAL);
  columns   = new wxBoxSizer *[7];
  for (i=0; i<7; i++) { // по столбцам
    columns[i] = new wxBoxSizer(wxVERTICAL);
    table[i] = new wxTextCtrl *[15];
    for (j=0; j<15; j++) { // по строкам
      table[i][j] = new wxTextCtrl(panel, wxID_ANY, wxT("SomeText"), wxDefaultPosition,
                                wxSize(60, 18));
      columns[i]->Add((wxWindow *)table[i][j]);
    }
    container->Add(columns[i]);
  }
  SetSizer(container);
  //========================================================
  table[0][0]->SetValue(wxT("MyFrame constructor")); // проходит без ошибок!
}
void MyFrame::SomeMethod()
{
  // например поле ввода на первой строке первого столбца
  table[0][0]->SetValue(wxT("SomeMethod call")); // <- прога падает с ошибкой Segmentation fault
}

После компиляции программа запускается нормально, появляется импровизированная таблица полей ввода,
но, как показано в коде, при обращении к массиву из конструктора MyFrame всё проходит нормально
и текст меняется, но стоит вызвать метод SomeMethod из любого места, напр., при нажатии на кнопку,
то программа вылетает с ошибкой.
Хочу узнать мнение профессионалов - может меня вообще не туда понесло? smile
Есть подозрение, что C-массивы в таком виде не годятся для объектов, т. к. объекты сложно устроены в памяти. Пробовал wxObjArray для одномерного массива - компилятор ругается на то, что у wxTextCtrl
закрытый конструктор копирования :(.
Интересно, как-бы этот вопрос решили вы? Какие существуют методы работы с массивами объектов?
PM   Вверх
mes
Дата 24.9.2008, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



я не пойму зачем пользоваться Си масивами особенно в случае многомерных массивов , когда есть стловские контейнеры.
плюс способ реализации массива всегда должен оставаться за кадром, для этого он должен быть разгружен функцией.

Цитата(Fabio @  24.9.2008,  20:33 Найти цитируемый пост)
компилятор ругается на то, что у wxTextCtrl
закрытый конструктор копирования :(.

А при чем тут закрытость  конструктора, когда хранить вы должны указатели, а не сами объекты. Соответственно wxObjArray не подходит.
см. WX_DEFINE_ARRAY_PTR(wxTextCtrl*, ..)

Цитата(Fabio @  24.9.2008,  20:33 Найти цитируемый пост)
Интересно, как-бы этот вопрос решили вы? Какие существуют методы работы с массивами объектов? 

Я бы создал класс создал бы класс WTextCtrlTable с методами Resize и GetPtr  , которые предоставляли бы работу с двухмерным массивом, а для контейнера использовал бы одномерный массив указателей (std::vector или wxPtrArray). 


--------------------
PM MAIL WWW   Вверх
Fabio
Дата 24.9.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



Цитата

А при чем тут закрытость  конструктора...

В этом случае я пытался сделать массив не из указателей, с помощью описанного в справке к wxWidgets 2.8.8 способа,
приведу кусок примера из раздела про wxArray:
Код

#include <wx/dynarray.h>

// we must forward declare the array because it is used inside the class
// declaration
class MyDirectory;
class MyFile;

// this defines two new types: ArrayOfDirectories and ArrayOfFiles which can be
// now used as shown below
WX_DECLARE_OBJARRAY(MyDirectory, ArrayOfDirectories);
WX_DECLARE_OBJARRAY(MyFile,      ArrayOfFiles);

class MyDirectory
{
...
    ArrayOfDirectories m_subdirectories; // all subdirectories
    ArrayOfFiles       m_files;          // all files in this directory
};

...

// now that we have MyDirectory declaration in scope we may finish the
// definition of ArrayOfDirectories -- note that this expands into some C++
// code and so should only be compiled once (i.e., don't put this in the
// header, but into a source file or you will get linking errors)
#include <wx/arrimpl.cpp> // this is a magic incantation which must be done!
WX_DEFINE_OBJARRAY(ArrayOfDirectories);

// that's all!

Что-то типа этого у меня получилось с wxTextCtrl. Но при компиляции вываливается ошибка (дословно не помню)
и открывается заголовочный файл textctrl.h с установленным курсором ошибки на строке с текстом
DECLARE_NO_COPY_CLASS(wxTextCtrlBase)
Код

#define DECLARE_NO_COPY_CLASS(classname)        \
    private:                                    \
        classname(const classname&);            \
        classname& operator=(const classname&);

Из файла defs.h, в доказательство к утверждению про конструкторы копирования.
Вот такие вот дела...

Вообще странно как-то, как будто указатели в массиве становятся недействительными после отработки
конструктора MyFrame. Закрытый указатель ***table находится в области видимости метода SomeMethod,
а всё равно при table[m][n]->AnyMethod прога падает.

Работаю в C::B + MinGW + wxWidgets 2.8.8 под MSW.

PS. Заметил в своём первом посте ошибку (в данном случае не принципиальную) - в циклах распределения
памяти перепутал строки со столбцами - массив 7x15, а не 15x7, но графически в окне выглядит всё правильно из-за wxBoxSizer-ов smile .

PM   Вверх
mes
Дата 25.9.2008, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Fabio @  24.9.2008,  23:44 Найти цитируемый пост)
В этом случае я пытался сделать массив не из указателей, с помощью описанного в справке к wxWidgets 2.8.8 способа,..доказательство к утверждению про конструкторы копирования

a никто и не спорит, что конструктор копирования закрыт. 
Цитата(mes @  24.9.2008,  22:49 Найти цитируемый пост)
Соответственно wxObjArray не подходит.

Я лишь сказал что делать массив надо указателей, а не объектов, поэтому конструктор копирования просто по боку. )

Цитата(Fabio @  24.9.2008,  23:44 Найти цитируемый пост)
Вообще странно как-то, как будто указатели в массиве становятся недействительными после отработки конструктора MyFrame. Закрытый указатель ***table находится в области видимости метода SomeMethod,
а всё равно при table[m][n]->AnyMethod прога падает

такого быть не может, где то косяк. Можно и поискать, но я бы посоветовал сразу переписать с нормальным подходом
и  ошибка сама должна вылезти наружу или самоликвидироваться.


Это сообщение отредактировал(а) mes - 25.9.2008, 00:24


--------------------
PM MAIL WWW   Вверх
mes
Дата 25.9.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



вставил Ваш код в проект - никаких вылетов не наблюдается. Текст в 1 м контроле меняется на SomeMethod call.


--------------------
PM MAIL WWW   Вверх
Fabio
Дата 27.9.2008, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



Спасибо за ответы, mes.
То, что код работает - это хорошо, но я писАл вначале
Цитата

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

т. е. если создадим кнопку на панели, законнектим (я сделал обработчик события через метод Connect,
можно и через таблицу событий, результат один и тотже) к ней процедуру OnMyClick, отрабатывающую
по клику на кнопку, и если в OnMyClick вызвать SomeMethod, то программа завершает выполнение с
ошибкой! Даже если просто напрямую обратиться к массиву эдитов, то прога падает smile .
PM   Вверх
mes
Дата 27.9.2008, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Fabio @  27.9.2008,  00:33 Найти цитируемый пост)
но я писАл вначале

Цитата(Fabio @  27.9.2008,  00:33 Найти цитируемый пост)

т. е. если создадим кнопку на панели, законнектим (я сделал обработчик события через метод Connect,
можно и через таблицу событий, результат один и тотже) к ней процедуру OnMyClick


Я так и подумал что Вы расцените мои слова неправильно ) 
Цитата(mes @  25.9.2008,  00:42 Найти цитируемый пост)
Текст в 1 м контроле меняется на SomeMethod call. 

Я тоже законнектил, правда через статическую карту. И при событии текст в первом контроле менялся.
Никаких вылетов не было. ) Так что причина в другом месте )

Это сообщение отредактировал(а) mes - 27.9.2008, 00:49


--------------------
PM MAIL WWW   Вверх
Fabio
Дата 27.9.2008, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



Спасибо за помощь!
Было-бы прекрасно, если-бы Вы привели Ваш код здесь, тогда я сравню со своим и надеюсь
найду косяк. Хочу просто разобраться в этом вопросе до конца smile .
Вот мой код полностью:
Код

// объявление наследника wxApp и т. д.
...

class MyFrame : public wxFrame
{
public:
  MyFrame(const wxString &title, const wxSize &size, long style);
  void SomeMethod();
  void OnMyClick(wxCommandEvent &event);
private:
  wxPanel *panel;
  wxButton *btnTest;
  wxTextCtrl ***table;
  wxBoxSizer *container, **columns;
};

MyFrame::MyFrame(const wxString &title, const wxSize &size, long style)
         : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, size, style)
{
  int i, j;
  panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(800, 250), wxTAB_TRAVERSAL);

  //==== создание массива полей ввода =======
  table = new wxTextCtrl **[7];
  btnTest = new wxButton(panel, wxID_ANY, wxT("Test"), wxDefaultPosition,
                                          wxSize(60, 20));
  container = new wxBoxSizer(wxHORIZONTAL);
  columns   = new wxBoxSizer *[7];
  for (i=0; i<7; i++) { // по столбцам
    columns[i] = new wxBoxSizer(wxVERTICAL);
    table[i] = new wxTextCtrl *[15];
    for (j=0; j<15; j++) { // по строкам
      table[i][j] = new wxTextCtrl(panel, wxID_ANY, wxT("SomeText"), wxDefaultPosition,
                                wxSize(60, 18));
      columns[i]->Add((wxWindow *)table[i][j]);
    }
    container->Add(columns[i]);
  }
  btnTest->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
                                wxCommandEventHandler(MyFrame::OnMyClick));
  container->Add(btnTest);
  SetSizer(container);
  //========================================================
  table[0][0]->SetValue(wxT("MyFrame constructor")); // проходит без ошибок!
}
void MyFrame::SomeMethod()
{
  // например поле ввода на первой строке первого столбца
  table[0][0]->SetValue(wxT("SomeMethod call")); // <- прога падает с ошибкой Segmentation fault
}
void MyFrame::OnMyClick(wxCommandEvent &event)
{
  SomeMethod(); // ошибка
  table[0][0]->SetValue(wxT("SomeMethod call")); // ошибка
}


Это сообщение отредактировал(а) Fabio - 27.9.2008, 15:33
PM   Вверх
mes
Дата 27.9.2008, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Fabio @  27.9.2008,  09:35 Найти цитируемый пост)
Было-бы прекрасно, если-бы Вы привели Ваш код здесь


Код

class MyFrame : public wxFrame
{
    DECLARE_EVENT_TABLE();
        ....
    wxButton *WxButton1;
       ...
        enum
        {
            ID_WXBUTTON1 = 1003
        };
};


BEGIN_EVENT_TABLE(MyFrame ,wxFrame)
    EVT_CLOSE(Project2Frm::OnClose)
    EVT_BUTTON(ID_WXBUTTON1,MyFrame ::WxButton1Click)
END_EVENT_TABLE()

MyFrame::MyFrame(const wxString &title, const wxSize &size, long style)
         : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, size, style)
{
    WxBoxSizer1 = new wxBoxSizer(wxHORIZONTAL);
    this->SetSizer(WxBoxSizer1);
    this->SetAutoLayout(true);

    WxButton1 = new wxButton(this, ID_WXBUTTON1, wxT("WxButton1"), wxPoint(5,5), wxSize(75,25), 0, wxDefaultValidator, wxT("WxButton1"));
    WxButton1->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("Tahoma")));
    WxBoxSizer1->Add(WxButton1,0,wxALIGN_CENTER | wxALL,5);

  int i, j;
  panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(800, 250), wxTAB_TRAVERSAL);
  //==== создание массива полей ввода =======
  //  Ваш код из 1го примера
  // ...

 //  вместо  SetSizer(container);
   panel->SetSizer(container);

  GetSizer()->Add (panel, 0, wxALL, 5);
  //========================================================
  table[0][0]->SetValue(wxT("MyFrame constructor")); // проходит без ошибок!

    GetSizer()->Layout();
    GetSizer()->Fit(this);
    GetSizer()->SetSizeHints(this);
    Center();
}

void MyFrame::WxButton1Click(wxCommandEvent& event)
{
     SomeMethod();
     table[0][1]->SetValue(wxT("Direct call"));
}


Добавлено через 13 минут и 8 секунд
Цитата(Fabio @  27.9.2008,  09:35 Найти цитируемый пост)
      table[i][j]->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
                        wxCommandEventHandler(OnMyClick::OnTempToggle));

Нельзя ли поподробней как Вы пришли к этой строчке?  ) 
Вот тут у Вас и вылетает.
При таком коде при событии  wxEVT_COMMAND_BUTTON_CLICKED в обработчике ячейки таблицы (wxTextCtrl)
вызовется метод класса wxTextCtrl со смещением метода OnTempToggle в классе OnMyClick (кстати а где он у Вас описан ?).



--------------------
PM MAIL WWW   Вверх
Fabio
Дата 27.9.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



Извиняюсь, вышла описка! Писал по памяти с просони smile . Свой пост поправил - именно это не работает.
Но!, попробовав снова со статической картой, основываясь на Вашем примере всё действительно
заработало, спасибо! И всё же нужно добить этот вопрос, похоже я как-то не так работаю с
методом Connect. Надо разбираться, так как у меня есть необходимость менять динамически
обработчики в ходе выполнения программы, да и к примеру назначить один и тот же обработчик
OnClick для n-го количества кнопок через карту - гхммм...

PS. Такие ламерские вопросы у меня из-за того, что только недавно начал разбираться с
кроссплатформенными GUI-библиотеками (выбор пал на wxWidgets).
Раньше GUI (и всё остальное smile ) писал в Borland C++ Builder-е.
PM   Вверх
mes
Дата 28.9.2008, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Fabio @  27.9.2008,  15:58 Найти цитируемый пост)
Свой пост поправил - именно это не работает.


Цитата(Fabio @  27.9.2008,  09:35 Найти цитируемый пост)
 btnTest->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
                                wxCommandEventHandler(MyFrame::OnMyClick));


это фактически тоже самое что и было до этого

Добавлено через 31 секунду
Цитата(Fabio @  27.9.2008,  15:58 Найти цитируемый пост)
И всё же нужно добить этот вопрос, похоже я как-то не так работаю с
методом Connect.

Ага,  именно так.

Добавлено через 1 минуту и 57 секунд
Цитата(Fabio @  27.9.2008,  15:58 Найти цитируемый пост)
Надо разбираться, так как у меня есть необходимость менять динамически
обработчики в ходе выполнения программы, да и к примеру назначить один и тот же обработчик
OnClick для n-го количества кнопок через карту - гхммм...


Если для таблицы то вполне подходит и статическая карта. Только каждой ячейке задавайте уникальный id.

Добавлено через 7 минут и 22 секунды
А.. да..  не создавайте ячейки сразу в главном окне - лучше объедените с панелью и пусть обработчик панели обрабатывает все ячейки,
а для внешнего мира генерирует подходящие сообщения. (сообщения можно использовать как от какого нибудь подходяшего контрола, либо определить самим.)


--------------------
PM MAIL WWW   Вверх
Fabio
Дата 28.9.2008, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



Большое спасибо за советы! Буду разбираться дальше.
Кстати, в обработчике OnMyClick, который я назначил кнопке btnTest через Connect, любой другой код
работает нормально, а с массивом wxTextCtrl-ов работать всёравно не хочет, ну да ладно, так и придётся
работать со статическими картами сообщений, чего не хотелось.
PM   Вверх
mes
Дата 28.9.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Fabio @  28.9.2008,  10:47 Найти цитируемый пост)
Кстати, в обработчике OnMyClick, который я назначил кнопке btnTest через Connect,


В вашем куске кода :
Код

 btnTest->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
                                wxCommandEventHandler(MyFrame::OnMyClick));


вы используете this от wxButton (btnTest), a смещение метода MyFrame::OnMyClick(), я не представляю как подобный код может хоть иногда давать правильный результат.

нужно писать так :
Код

MyFrame:: ...
{
// назначить свой метод обработчиком
 this->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
                                wxCommandEventHandler(MyFrame::OnMyClick));

// ну и соответственно если обработчик описан в кнопке
 btnTest ->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
                                wxCommandEventHandler(MyButton::OnMyClick));

}

ну а для определения инициатора события использовать wxID


--------------------
PM MAIL WWW   Вверх
Fabio
Дата 28.9.2008, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



И всётаки я добился своего! Косяк найден! Спасибо, mes!
Хотел сделать инкремент Вашей репутации, но до 100 сообщений мне ещё далеко smile .

Дело оказалось в этой строчке:

/*btnTest->*/Connect(ID_WXBUTTON, wxEVT_COMMAND_BUTTON_CLICKED,
                                wxCommandEventHandler(MyFrame::OnMyClick));

Нужно было вызывать метод Connect по указателю this, а не btnTest и добавить идентификатор
источника события - ID_WXBUTTON.
В таком виде код из OnMyClick может обращаться к массиву полей ввода.
PM   Вверх
mes
Дата 29.9.2008, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(Fabio @  28.9.2008,  22:00 Найти цитируемый пост)
Нужно было вызывать метод Connect по указателю this, а не btnTest и добавить идентификатор
источника события - ID_WXBUTTON.


ага, нужно чтоб "this"  был того класса , чей метод используется как обработчик
вот выделил главные места в коде приведенного выше :

Цитата

(MyFrame*) this->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
                                wxCommandEventHandler(MyFrame::OnMyClick));

(MyButton*) btnTest ->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
                                wxCommandEventHandler(MyButton::OnMyClick));



Это сообщение отредактировал(а) mes - 29.9.2008, 00:48


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1024 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.