Seite 1 von 1

Funktionsaufrufe [gelöst]

Verfasst: 18. April 2010 09:34
von rvb
Hallo Forum,

ich wollte eine Funktion haben, die mir Spalten und Zeilen eines QGridLayout addiert.

in mainwindow.cpp:
int MainWindow::gridItems(QGridLayout &grid) {
return ( grid->rowCount() + grid->columnCount() );
}

dazu in der mainwindow.h als protected:
int gridItems(QGridLayout&);

der Aufruf erfolgt dann in mainwindow.cpp mit
qDebug() << gridItems(*myGridLayout);

gibt dann aber folgende Fehler:
mainwindow.cpp: In member function ‘int MainWindow::gridItems(QGridLayout&)’:
mainwindow.cpp:141: error: base operand of ‘->’ has non-pointer type ‘QGridLayout’
mainwindow.cpp:141: error: base operand of ‘->’ has non-pointer type ‘QGridLayout’

Könnt ihr mir erklären was ich da falsch mache?
Grüße
Roland

Verfasst: 18. April 2010 09:59
von franzf
Du übergibst eine Referenz und keinen Zeiger. Pfeiloperator (->) Brauchst du, wenn du einen Zeiger als Operand hast.
Da du selten ein QGridLayout (überhaupt ein QObject) per Value antreffen wirst, kannst du auch einfach einen Zeiger an die Funktion übergeben.

Code: Alles auswählen

int MainWindow::gridItems( QGridLayout const * const grid) const {
    return ( grid->rowCount() + grid->columnCount() );
}
Die andere Variante mit Referenz:

Code: Alles auswählen

int MainWindow::gridItems( QGridLayout const&  grid) const {
    return ( grid.rowCount() + grid.columnCount() );
}
Sowas sollte aber in jedem Buch im Kapitel über Zeiger/Referenzen stehen!

Verfasst: 18. April 2010 10:07
von rvb
Vielen Dank für die schnelle Hilfe

Verfasst: 18. April 2010 10:16
von franzf
BTW. machst du da wahrscheinlich grad nen kleinen mathematischen Fehler ;)
Die Anzahl der Items erhältst du nicht durch Addition der Zeilen- und Spalten-Anzahl sondern durch Multiplikation!

Verfasst: 18. April 2010 11:30
von rvb
Danke für den freundlichen Hinweis aber das stimmt schon so.

linke Reihe
+ obere Reihe
- 1 Feld (weil linksoben doppelt)
+ 1 extra Feld (für Spielfigur)

= rows + colums

Hätte ich vielleicht gleich mit dazuschreiben sollen, eh sich noch jemand unnötig Gedanken macht.

Grüße
Roland