crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Проблема с конструктором при создании формы
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 26.8.2008, 16:19
  на русском http://quirks.chat.ru/cpp/faq/#s10p3
Andrew Selivanov Дата 26.8.2008, 15:52
  Обобщим? :)
1) Конструктор это не функция, его нельзя вызвать.
2) Это ограничение есть в C++, в Java его нет (можно использовать такие штуки как this(), super() )
3) Может быть ограничение уберут в upcoming стандарте.

А вообще это вопрос из замечательного FAQ:
http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.3
void* Дата 14.8.2008, 10:55
  Delphist, учи матчасть :)
тебе все правильно объяснили zamnach и AD
Litkevich Yuriy Дата 14.8.2008, 10:20
 
Цитата(Delphist @ 14.8.2008, 14:05) *
у нас Delphi без проблем это делает

А ты не путаешь конструктор с обработчиком события типа OnCreate ?
AD Дата 14.8.2008, 10:16
 
Цитата(Delphist @ 14.8.2008, 11:05) *
А почему нельзя так как я привел, у нас Delphi без проблем это делает, а тут что за ассемблер

Насколько я знаю: в С++ в конструкторе можно вызывать конструктор предка, а не другой свой же конструктор. Поэтому следует сделать, как описал Litkevich Yuriy
zamnach Дата 14.8.2008, 10:08
 
Цитата(Delphist @ 14.8.2008, 10:46) *
Я хочу в своем классе создать два конструктора:
/******MyClass.cpp******/
MyClass::MyClass(CSharedV &v, QWidget *parent, Qt::WFlags flags)
    :QMainWindow(parent, flags)
{
     MyClass(parent, flags);
    setShared(v);
}


Присоединюсь к Юрию и добавлю, что во втором конструкторе создается экземпляр класса MyClass (с помощью конструктора№1).
По выходу из конструктора №2 этот экземпляр благополучно прибивается.
Delphist Дата 14.8.2008, 10:05
 
Цитата(Litkevich Yuriy @ 14.8.2008, 9:57) *
это скорее вопрос по С++
Вынеси всю инициализацию в отдельную функцию:

А почему нельзя так как я привел, у нас Delphi без проблем это делает, а тут что за ассемблер
Litkevich Yuriy Дата 14.8.2008, 9:57
  это скорее вопрос по С++
Вынеси всю инициализацию в отдельную функцию:
void MyClass::Init()
{
    sharedDataModel = new SharedDataModel(this);
    ui.setupUi(this);    
    ui.treeView->setModel(sharedDataModel);
    ui.treeView->header()->setResizeMode(0, QHeaderView::Stretch);
    ui.treeView->header()->setResizeMode(1, QHeaderView::Stretch);
}

и ее вызывай в обоих кострукторах
Delphist Дата 14.8.2008, 9:46
  Я хочу в своем классе создать два конструктора:
/******MyClass.h********/

class MyClass : public QMainWindow
{
    Q_OBJECT

public:
    MyClass(QWidget *parent = 0, Qt::WFlags flags = 0);                             //конструктор №1
    MyClass(CSharedV &v, QWidget *parent = 0, Qt::WFlags flags = 0);  //конструктор №2
...
}

    
/******MyClass.cpp******/

MyClass::MyClass(QWidget *parent, Qt::WFlags flags)
    :QMainWindow(parent, flags)
{
    sharedDataModel = new SharedDataModel(this);
    ui.setupUi(this);    
    ui.treeView->setModel(sharedDataModel);
    ui.treeView->header()->setResizeMode(0, QHeaderView::Stretch);
    ui.treeView->header()->setResizeMode(1, QHeaderView::Stretch);
}

MyClass::MyClass(CSharedV &v, QWidget *parent, Qt::WFlags flags)
    :QMainWindow(parent, flags)
{
     MyClass(parent, flags);
    setShared(v);
}


Прикол в том что если я вызываю конструктор№2, то почему форма создается без
дерева, почему это происходи и как сделать чтобы все нормально заработало?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 16.4.2024, 17:54