findChildren - komische Warnung

Alles rund um die Programmierung mit Qt
Antworten
Flachkoepper
Beiträge: 149
Registriert: 11. Januar 2005 12:14
Wohnort: Hannover

findChildren - komische Warnung

Beitrag von Flachkoepper »

Moin,

folgender Quellcode:

Code: Alles auswählen

QList<QLineEdit* > allLineEdits = findChildren<QLineEdit *>();
	for( int i=0; i< allLineEdits.size(); ++i){
		connect( allLineEdits.at(i), SIGNAL(textEdited(const QString&)), this, SLOT( setDirty() ) );
	}

	QList<QComboBox* > allComboBoxes = this->findChildren<QComboBox *>();
	for( int i=0; i< allComboBoxes.size(); ++i){
		connect( allComboBoxes.at(i), SIGNAL(currentIndexChanged(int) ), this, SLOT( setDirty() ) );
	}
liefert mir beim Compilieren folgende Ausgabe:

Code: Alles auswählen

/usr/local/Trolltech/Qt-4.2.2/include/QtCore/qobject.h: In function ‘QList<T> qFindChildren(const QObject*, const QString&) [with T = QLineEdit*]’:
/usr/local/Trolltech/Qt-4.2.2/include/QtCore/qobject.h:148:   instantiated from ‘QList<T> QObject::findChildren(const QString&) const [with T = QLineEdit*]’
editHeader.cpp:988:   instantiated from here
/usr/local/Trolltech/Qt-4.2.2/include/QtCore/qobject.h:378: warning: type-punning to incomplete type might break strict-aliasing rules
/usr/local/Trolltech/Qt-4.2.2/include/QtCore/qobject.h: In function ‘QList<T> qFindChildren(const QObject*, const QString&) [with T = QComboBox*]’:
/usr/local/Trolltech/Qt-4.2.2/include/QtCore/qobject.h:148:   instantiated from ‘QList<T> QObject::findChildren(const QString&) const [with T = QComboBox*]’
editHeader.cpp:993:   instantiated from here
/usr/local/Trolltech/Qt-4.2.2/include/QtCore/qobject.h:378: warning: type-punning to incomplete type might break strict-aliasing rules
Ich weiß, ist nur ne Warnung, aber trotzdem würde ich gerne verstehen, was er bemängelt, denn aus der Warnung werde ich nicht schlau. Irgendwer ne Idee?

Viele Grüße,
Flachkoepper
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

qcombobox.h nicht inkludiert? inklompete type weisst eigentlich immer auf sowas hin.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Flachkoepper
Beiträge: 149
Registriert: 11. Januar 2005 12:14
Wohnort: Hannover

Beitrag von Flachkoepper »

Doch, QComboBox, QLineEdit und QObject sind inkludiert.
Tarek
Beiträge: 46
Registriert: 3. Oktober 2005 14:29
Kontaktdaten:

Beitrag von Tarek »

Die Warnung bedeutet, dass es durch eine Typumwandlung in einen unbekannten (Template-)Typ passieren kann dass zwei Zeiger unterschiedlichen Typs auf die gleiche Speicheradresse verweisen, was nach den Regeln für Strict-Aliasing verboten ist.

In qobject.h wird soetwas mit einem Null-Zeiger gemacht, um auf ein statisches Member des übergebenen Typs zuzugreifen. Das lässt sich wahrscheinlich nur so machen weil ja der :: Operator für einen Zeigertyp nicht anwendbar ist.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Dann weiss ich es leider nicht. Der 0-Zeiger erzeugt die Warnung nicht da ich nicht glaube dass Trolltech dies eingebaut hätte wenn da eine Warnung mit dem gcc Compiler kommen würde.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten