la compilation d'une classe C ++ dans Xcode: Erreur lors de la compilation: vecteur stl
Question
J'ai une classe C ++ qui compile bien sur linux avec gcc et veuves dans visual studio.
boid.h:
#ifndef BOID_CLASS_HEADER_DEFINES_H
#define BOID_CLASS_HEADER_DEFINES_H
#include "defines.h"
class Boid {
public:
// Initialize the boid with random position, heading direction and color
Boid(float SceneRadius,float NormalVel);
.....
protected:
...
};
#endif
et boid.cpp:
#include "Boid.h"
// Initialize the boid with random position, heading direction and color
Boid::Boid(float SceneRadius,float NormalVel)
{
....
}
Cependant, je reçois l'erreur suivante lorsque je compile ce code dans Xcode:
Compiling Boid.h: "error: vector: No such file or directory"
Toutes les idées? Je pensais que vous pouvez prendre le code C / C ++ et le compiler dans Xcode sans problèmes?
Merci
EDIT : Ajout defines.h (également ajouté #endif à échantillon, mais qui était dans le code d'origine)
EDIT 2 : Je reçois une autre erreur après une commentant deux comprend, il y avait vide:. L'erreur de vecteur ci-dessus
#ifndef BOID_NAV_DEFINES_H
#define BOID_NAV_DEFINES_H
#include <stdlib.h>
#include <vector>
#include "Vector3d.h"
#include "Point3d.h"
#include "win_layer.h"
#endif
La solution
Êtes-vous incluez l'en-tête C ++ dans un fichier .m?
Les fichiers .m sont traités comme des fichiers avec des extensions .c Objective-C.
Les fichiers .mm sont traités comme des fichiers .cpp avec des extensions Objective-C, il est appelé Objective-C ++
Il suffit de renommer un fichier .M .mm, faites un clic droit ou Ctrl-clic et sélectionnez Renommer dans le fichier dans Xcode.
Autres conseils
Sans changer toute .M .mm ou quelque chose comme ça, si vous cliquez sur votre projet, cliquez sur tagets-> paramètres de construction aller tout le chemin jusqu'à "LLVM GCC 4.2 - Langues" (nouvelle Xcode dit "compilateur d'Apple LLVM 4.2" ), vous verrez Compile sources modifier cette valeur à Objective-C ++
Assurez-vous de la compilation comme C ++. Clic droit sur le fichier dans Xcode et sélectionnez Obtenir des informations et assurez-vous que Type de fichier est réglé sur sourcecode.cpp.cpp pour les fichiers de mise en œuvre.
J'espère que cela vous aidera. Après la mise à jour Xcode à la version 10, j'ai eu des problèmes, y compris
C ++ bibliothèque standard: libc ++ (LLVM C ++ bibliothèque standard avec le support 11 C ++)
Compilé sans aucun problème.
Sans aucun doute, quelque chose defines.h affecte la définition de la classe.
Cette question avait deux erreurs:
- un de mes inclut avait une faute de frappe qui a provoqué une erreur de compilation
- le vecteur non erreur trouvée a été fixé par les fichiers .M .mm
En supposant que vous parlez du OS X XCode, qui utilise gcc pour faire la compilation réelle. Il devrait y avoir aucune différence entre cela et Linux, autres que des versions différentes peut-être de gcc.
La première chose qui me saute aux yeux est que vous avez tapé « boid.h » comme le nom du fichier, mais vous y compris « Boid.h ». En supposant que n'est pas une faute de frappe, j'attendre à ce que de causer des problèmes sur Linux et OS X ....
Sous la direction de répondre à la nouvelle question: Hmmm ... vecteur est certainement partie de Xcode. /Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/vector
sur ma machine
Une réflexion: Si vous le port de la source et makefiles de Linux construire vers le Mac, vous pouvez probablement le compiler à partir de la ligne de commande exactement comme vous le faites sur Linux ....
Je ne sais pas si vous avez oublié de coller, mais vous avez un #ifndef unterminated
À l'intérieur defines.h
Modifier Vous semblez avoir trouvé la solution. Une remarque:
#include <stdlib.h>
Pour C ++, s'il vous plaît:
#include <cstdlib>
: D