Je vais avoir un fichier d'en-tête appelé cnVector.h dont l'implémentation est écrite en cnVector.cpp. Ces deux fichiers se trouvent dans le même répertoire.Problèmes de liaison des fichiers .cpp dans Code :: Blocks
cNormalCBP/
+ src/
+ cNormal/
+ cnUtils/
- cnVector.h
- cnVector.cpp
- main.cpp
L'en-tête contient une définition de classe simple.
class cnVector {
public:
cnVector(double, double, double);
inline cnVector cross(const cnVector&) const;
};
La mise en œuvre dans le fichier .cpp est la suivante:
#include "cnVector.h"
/* constructor */ cnVector::cnVector(double x, double y, double z)
: x(x), y(y), z(z) {
}
cnVector cnVector::cross (const cnVector& vOther) const {
return cnVector(
y * vOther.z + z * vOther.y,
z * vOther.x + x * vOther.z,
x * vOther.y + y * vOther.x);
}
Maintenant, le code suivant de main.cpp pauses à la ligne en raison d'une référence non définie à cnVector :: cross (cnVector const &) const;
Notez comment l'implémentation du constructeur est reconnue, mais pas la méthode cnVector::cross
.
int main() {
cnVector v1(1, 0, 0), v2(0, 1, 0);
cnVector v3 = v1.cross(v2);
}
Je reçois aussi un avertissement message d'erreur : fonction inline 'cnVector cnVector :: croix (const cnVector &) const' utilisé mais jamais défini.
La copie de l'implémentation dans main.cpp fonctionne.
Pouvez-vous me expliquer pourquoi je peux construire une cnVector instance, mais la mise en œuvre d'autres méthodes ne sont pas reconnus?
"code de main.cpp casse à la ligne 3" - par cela vous voulez dire que vous obtenez une erreur de lien? Etes-vous sûr que cnVector.cpp est répertorié dans "Build target files" sous "Build target tab" dans "Project-> Properties"? Enfin pouvez-vous poster main.cpp complet? Voulez-vous voir #includes – Kashyap
Niklas, pouvez-vous nous dire quel compilateur/os vous utilisez? Et y a-t-il un code qui a été omis ici? Comme je l'ai noté sur la réponse ci-dessous, j'ai coupé et collé votre code et cela fonctionne bien pour moi dans VS 2010 sur Win7. – JoeFish
@Joe Bien sûr, désolé. * Win7 CyGWin GCC *. Oui, il y a un code omis, dans le fichier d'en-tête d'autres déclarations de méthodes et leur implémentation dans le fichier * .cpp * ainsi que les inclusions inutiles. Dans le * main.cpp * j'ai manqué le '#include cNormal/cNormal.h" '. * CNormal.h * inclut essentiellement * cnUtils.h * qui inclut * cnVector.h *. –