Important: Please read the Qt Code of Conduct -

Dynamic array object constructor logical error

  • I found a logical error in the 'connect' function in the source below.
    This source is compiled well.
    but, if I define 'connect (room [0] ....)' there is an logical error that all 'room' array objects behave the same as 'room [0]'.
    I do not know why this is an error.

    please help me... T^T......

    MainWindow::MainWindow(QWidget *parent) :
        ui(new Ui::MainWindow)
        createRoom("101","20000","71000",Room::take_sleepRoom); // room[0]
        createRoom("102","20000","72000",Room::take_sleepRoom); // room[1]
        createRoom("103","20000","73000",Room::take_sleepRoom); // room[2]
        createRoom("105","20000","74000",Room::take_sleepRoom); // room[3]
        createRoom("106","20000","75000",Room::take_sleepRoom); // room[4]
        createRoom("107","20000","76000",Room::take_sleepRoom); // room[5]
        createRoom("201","25000","81000",Room::take_sleepRoom); // room[6]
        createRoom("202","25000","82000",Room::take_sleepRoom); // room[7]
        createRoom("203","25000","83000",Room::take_sleepRoom); // room[8]
        connect(room[0],&Room::loadPrice,this,&MainWindow::setPriceLCD); // This line is  logical error!!!
    void MainWindow::createRoom(const QString &_roomId ,
                                QString _takePrice ,
                                QString _sleepPrice ,
                                int _sellType)
       room[Room::count] = new Room(_roomId,_takePrice,_sleepPrice,_sellType); // Array object constructor  // Room declaration = Room *room[1000];
       // 3*3 GridLayout setup
       int page = Room::count / 9; // count is static value
       int row = (Room::count % 9) / 3;
       int column = Room::count % 3;
           roomPage[page] = new QWidget;
           roomLay[page] = new QGridLayout;
       } else {

    Thanks in advance for your help.!

  • Moderators

    @Kycho said in Dynamic array object constructor logical error:

    but, if I define 'connect (room [0] ....)' there is an logical error that all 'room' array objects behave the same as 'room [0]'.

    You mean all 9 objects get connected to that slot, instead of just the first one? Interesting.

    room[Room::count] = new Room(_roomId,_takePrice,_sleepPrice,_sellType);

    You do realise that you are creating 9 Room objects but assign only one of them to room[Room::count], right? The other pointers are just free floating in memory. I base that on the fact that you say Room::count is static.

    In other words, every time your call createRoom you create a new object and put it's address to room[9] (I assume Room::count value is either 8 or 9).

  • @sierdzio

    Thank you very much!

    It was a great help to solve.

  • @sierdzio

    Fixed the error by correcting the definition of createRoom function as below.

    thank you for your reply.

    int page = (Room::count-1) / 9; // count is static value
       int row = ((Room::count-1) % 9) / 3;
       int column = (Room::count-1) % 3;

Log in to reply