Funktionsaufrufe [gelöst]

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
rvb
Beiträge: 35
Registriert: 8. April 2010 14:42

Funktionsaufrufe [gelöst]

Beitrag 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
Zuletzt geändert von rvb am 18. April 2010 10:07, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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!
rvb
Beiträge: 35
Registriert: 8. April 2010 14:42

Beitrag von rvb »

Vielen Dank für die schnelle Hilfe
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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!
rvb
Beiträge: 35
Registriert: 8. April 2010 14:42

Beitrag 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
Antworten