Le lancement de la commande de compilation, si tout ce passe bien, doît afficher la séquence suivante :
Mais la vie n'est pas toujours si simple, et de nombreux bug se glissent souvent dans votre code à l'insu de votre plein gré. Dans ce cas là, votre commande de compilation ne se terminera pas par "all ok", mais par ceci par exemple :
Donc, Attention à bien vérifier le résultat de votre commande de compilation!
L'erreur est toujours signalée par le mot error. Le compilateur précise aussi :
Exemple :
src/bonjour.cpp:153: error: expected `}' before 'else'Attention : Parfois, il se peut qu'une première erreur en entraine toute une vague. Exemple il vous manque une accolade :
La première erreur en entrainant une autre, il est fortement recommandé de commencer par corriger la première avant de passer à la suivante.
De même, il est important de corriger les warnings de compilation. Ceux-ci apparaissent sous la forme :
> ../src/bonjour.cpp: In function 'int main()': > ../src/bonjour.cpp:16: error: 'Cout' was not declared in this scope
La ligne incriminée contient : std::cout << "Bonjour!" << std::endl;
Le compilateur ne trouve pas cout, cette méthode n'étant pas déclarée. Il manque l'inclusion du fichier iostream :
#include <iostream>
> ../src/visu2d.cpp: In member function 'void Visu2D::EnregistrerSelection()': > ../src/visu2d.cpp:201: error: ambiguous overload for 'operator==' in 'nomFich == 0' > ../src/visu2d.cpp:201: note: candidates are: operator==(const char*, const char*) <built-in> > ../src/visu2d.cpp:201: note: operator==(QNoImplicitBoolCast, int) <built-in> > /usr/local/qt/lib/QtCore.framework/Headers/qstring.h:290: note: bool QString::operator==(const QString&) const > /usr/local/qt/lib/QtCore.framework/Headers/qstring.h:723: note: bool QString::operator==(const char*) const > /usr/local/qt/lib/QtCore.framework/Headers/qstring.h:340: note: bool QString::operator==(const QByteArray&) const > /usr/local/qt/lib/QtCore.framework/Headers/qbytearray.h:427: note: bool operator==(const char*, const QByteArray&) > /usr/local/qt/lib/QtCore.framework/Headers/qstring.h:735: note: bool operator==(const char*, const QString&) > ../src/visu2d.cpp: In member function 'bool Visu2D::LireSelection()': > ../src/visu2d.cpp:214: error: ambiguous overload for 'operator==' in 'nomFich == 0' > ../src/visu2d.cpp:214: note: candidates are: operator==(const char*, const char*) <built-in> > ../src/visu2d.cpp:214: note: operator==(QNoImplicitBoolCast, int) <built-in> > /usr/local/qt/lib/QtCore.framework/Headers/qstring.h:290: note: bool QString::operator==(const QString&) const > /usr/local/qt/lib/QtCore.framework/Headers/qstring.h:723: note: bool QString::operator==(const char*) const > /usr/local/qt/lib/QtCore.framework/Headers/qstring.h:340: note: bool QString::operator==(const QByteArray&) const > /usr/local/qt/lib/QtCore.framework/Headers/qbytearray.h:427: note: bool operator==(const char*, const QByteArray&) > /usr/local/qt/lib/QtCore.framework/Headers/qstring.h:735: note: bool operator==(const char*, const QString&) > make[3]: *** [../Darwin/visu2d.o] error 1
Cette erreur, bien que plus verbeuse, n'est pas si compliquée à traiter. Si vous regardez bien, la première erreur est celle-ci :
> ../src/visu2d.cpp:201: error: ambiguous overload for 'operator==' in 'nomFich == 0'La ligne correspondante dans le fichier est celle-ci :
200 : QString nomFich = QFileDialog::getOpenFileName(this, "Choisir le fichier", ".", "Images (*.sel)" ); 201 : if ( nomFich == 0)La variable nomFich est de type QString et le compilateur n'arrive pas à lui appliquer l'opérateur ==. Il propose donc diverses solutions :
>note: bool QString::operator==(const QString&) const >note: bool QString::operator==(const char*) const >note: bool QString::operator==(const QByteArray&) const >note: bool operator==(const char*, const QByteArray&) >note: bool operator==(const char*, const QString&)À vous de trouver la bonne. Dans notre cas, la meilleure solution consiste à faire ceci :
201 : if ( nomFich == QString(""))
> Headers -F/usr/local/qt/lib -DQT3_SUPPORT ../src/myWindow.cpp > ../src/myWindow.cpp:15:20: error: wframe.h: No such file or directory
Le compilateur n'a pas trouvé l'emplacement du fichier wframe.h. Plusieurs pistes possibles :
#include "wframe.h"Signifie que ce fichier doit se trouver dans un des chemins donnés au compilateur lors du lancement de la commande de compilation. Ici, c'est CMT qui lance le compilateur. Les chemins d'includes donnés au compilateur sont spécifiés par CMT dans le fichier "requirements", précédés de la directive include_dirs . Par défaut, le répertoire "include" y est inscrit.
#include <iostream>Signifie que ce fichier doit se trouver dans les répertoires de recherche par défaut du compilateur. Les librairies systèmes sont dans ce cas. Exemple :iostream, fstream ...
> In file included from ../src/myWindow.cpp:12: > ../src/myWindow.h:4:29: error: QtGui/QMainWindow: No such file or directory > ../src/myWindow.h:5:29: error: QtGui/QPushButton: No such file or directory > ../src/myWindow.cpp:13:17: error: QMenu: No such file or directory > ../src/myWindow.cpp:14:20: error: QMenuBar: No such file or directory