la compilation d'une classe C ++ dans Xcode: Erreur lors de la compilation: vecteur stl

StackOverflow https://stackoverflow.com/questions/534861

  •  22-08-2019
  •  | 
  •  

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
Était-ce utile?

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 et bibliothèques. Trouvé une solution facile en changeant le C ++ bibliothèque de types dans les paramètres de construction du projet (cible de paramètres de construction):

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top