Seite 1 von 1

findChildren - komische Warnung

Verfasst: 8. Februar 2007 10:00
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

Verfasst: 8. Februar 2007 11:02
von Christian81
qcombobox.h nicht inkludiert? inklompete type weisst eigentlich immer auf sowas hin.

Verfasst: 8. Februar 2007 11:10
von Flachkoepper
Doch, QComboBox, QLineEdit und QObject sind inkludiert.

Verfasst: 8. Februar 2007 11:20
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.

Verfasst: 8. Februar 2007 11:23
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.