G++ symboles non définis pour l'architecture x86_64
Je suis en train d'apprendre le C++, et ont été donné une mission à créer une classe Vector3D. Lorsque j'essaie de compiler main.cpp à l'aide de G++ sous OSX je reçois le message d'erreur suivant. Pourquoi en serait-il?
g++ main.cpp
Undefined symbols for architecture x86_64:
"Vector3DStack::Vector3DStack(double, double, double)", referenced from:
_main in cc9dsPbh.o
ld: symbol(s) not found for architecture x86_64
main.cpp
#include <iostream>;
#include "Vector3DStack.h";
using namespace std;
int main() {
double x, y, z;
x = 1.0, y = 2.0, z = 3.0;
Vector3DStack v (x, y, z);
return 0;
}
Vector3DStack.h
class Vector3DStack {
public:
Vector3DStack (double, double, double);
double getX ();
double getY ();
double getZ ();
double getMagnitude();
protected:
double x, y, z;
};
Vector3DStack.cpp
#include <math.h>;
#include "Vector3DStack.h";
Vector3DStack::Vector3DStack (double a, double b, double c) {
x = a;
y = b;
z = c;
}
double Vector3DStack::getX () {
return x;
}
double Vector3DStack::getY () {
return y;
}
double Vector3DStack::getZ () {
return z;
}
double Vector3DStack::getMangitude () {
return sqrt (pow (x, 2) * pow (y, 2) * pow (z, 2));
}
Essayez de supprimer le point-virgule après le comprend.
Merci pour votre suggestion, mais cela ne semble pas fonctionner?
Merci pour votre suggestion, mais cela ne semble pas fonctionner?
OriginalL'auteur | 2013-10-17
Vous devez vous connecter pour publier un commentaire.
Vous avez pour compiler et lier votre
Vector3DStack.cpp
. Essayez:Cela devrait créer un exécutable appelé
vectortest
.OriginalL'auteur Fozi
Passer à la mise en œuvre de
Vector3D
pour le compilateur:Ceci va produire un exécutable appelé
a.out
sur les systèmes Linux et Unix. Pour changer le nom du fichier exécutable de l'utilisation-o
option:C'est le plus simple possible de la construction de votre programme. Vous devriez en apprendre un peu plus lu à propos de
make
programme, ou même cmake.OriginalL'auteur piokuc
J'avais rencontré un problème similaire lors de l'écriture de ma propre mise en œuvre d'une table de hachage avec des modèles.
Dans votre main.cpp, il suffit d'inclure "Vector3DStack.cpp", qui comprend Vector3DStack.h, au lieu de simplement y compris Vector3DStack.h.
Dans mon cas, comme modèles, comme nous le savons, sont évalués au moment de la compilation, ayant templatized (y compris spécialisée) les méthodes de la classe dans le cadre de la rpc fichier (où ils sont définis) doivent être connus du compilateur. Certains le C++ astuces.. tellement de choses à retenir, facile à oublier les petites choses.
Le plus de chances vous avez déjà eu notre solution, merci pour les réponses posté plus tôt, mais mon de 0,02$, de toute façon.
Heureux De Programmation C++!
OriginalL'auteur ak_2050