Où placer mes fonctions inline (.h ou .cpp) ?
En théorie (d'après ce que j'ai lu sur Internet) que je fasse
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #ifndef MYFILE_H
#define MYFILE_H
#include <QObject>
class MyFile : public QObject
{
Q_OBJECT
public:
MyFile();
void setName(const QString & name) { this->name = name; }
private:
QString name;
};
#endif |
Code:
1 2 3 4 5
| #include "myfile.h"
MyFile::MyFile()
{
} |
ou bien
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #ifndef MYFILE_H
#define MYFILE_H
#include <QObject>
class MyFile : public QObject
{
Q_OBJECT
public:
MyFile();
void setName(const QString & name);
private:
QString name;
};
#endif |
Code:
1 2 3 4 5 6 7 8 9 10
| #include "myfile.h"
MyFile::MyFile()
{
}
inline void MyFile::setName(const QString & name)
{
this->name = name;
} |
...cela devrait faire la même chose.
MAIS j'ai remarqué que lorsque je veux utiliser la fonction setName sur un objet qui hérite de la classe MyFile alors les deux proposition ci-dessus ne donnent pas le même résultat, à savoir :
- La première solution compile bien.
- La deuxième provoque une erreur de compilation :
Code:
1 2 3 4 5 6
| debug/softpart.o: In function `ZN8SoftPart14setFromINIFileER9QSettings':
D:/Qt/Projets/toto/toto/titi/softpart.cpp:27: undefined reference to `MyFile::setName(QString const&)'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\toto.exe] Error 1
mingw32-make[1]: Leaving directory `D:/Qt/Projets/toto/toto'
mingw32-make: *** [debug] Error 2 |
J'ai donc deux questions :
- Pourquoi les 2 propositions ne donnent pas le même résultat ?
- Et surtout pourquoi la 2ème proposition ne compile pas ?
Merci