11 Stimmen

Kompilieren einer C++-Klasse in Xcode: Fehler beim Kompilieren: stl-Vektor

Ich habe eine C++-Klasse, die gut auf Linux mit gcc und auf Widows in Visual Studio kompiliert.

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

und in boid.cpp:

#include "Boid.h"

// Initialize the boid with random position, heading direction and color
Boid::Boid(float SceneRadius,float NormalVel) 
{
    ....
}

Ich erhalte jedoch den folgenden Fehler, wenn ich diesen Code in Xcode kompiliere:

Compiling Boid.h: "error: vector: No such file or directory"

Irgendwelche Ideen? Ich dachte, Sie könnten C/C++-Code nehmen und kompilieren Sie es in Xcode ohne Probleme?

Gracias

EDIT : Defines.h hinzugefügt (auch #endif zum Beispiel hinzugefügt, aber das war im ursprünglichen Code)

EDIT 2 : Ich erhalte einen anderen Fehler, nachdem ich ein paar leere Includes auskommentiert habe: den obigen Vektorfehler.

#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

24voto

epatel Punkte 45365

Fügen Sie den C++-Header in eine .m-Datei ein?

.m-Dateien werden wie .c-Dateien mit Objective-C-Erweiterungen behandelt.

.mm-Dateien werden wie .cpp-Dateien mit Objective-C-Erweiterungen behandelt, dann heißt es Objective-C++

Benennen Sie einfach eine beliebige .m-Datei in .mm um, klicken Sie mit der rechten Maustaste oder bei gedrückter Strg-Taste auf die Datei und wählen Sie in Xcode die Option Umbenennen.

18voto

John Riselvato Punkte 12659

Ohne .m in .mm oder ähnliches zu ändern, klicken Sie auf Ihr Projekt, dann auf tagets->build settings gehen Sie ganz nach unten zu "LLVM GCC 4.2 - Sprachen" (neuer xcode sagt "Apple LLVM Compiler 4.2" ) werden Sie sehen Quellen kompilieren als ändern Sie diesen Wert in Objektiv-C++ ;

4voto

DrArt Punkte 131

Ich hoffe, dies wird Ihnen helfen. Nach der Aktualisierung von xCode auf Version 10 hatte ich Probleme mit < map > und < vector > Bibliotheken. Ich fand eine einfache Lösung, indem ich den C++-Bibliothekstyp in den Build-Einstellungen des Projekts änderte (Build-Einstellungen des Ziels):

C++-Standardbibliothek: libc++ (LLVM-C++-Standardbibliothek mit Unterstützung für C++ 11)

Kompiliert ohne Probleme.

2voto

codelogic Punkte 68703

Stellen Sie sicher, dass Sie es als C++ kompilieren. Klicken Sie mit der rechten Maustaste auf die Datei in XCode und wählen Sie Infos erhalten und stellen Sie sicher, dass Datei Typ wird eingestellt auf sourcecode.cpp.cpp für die Implementierungsdateien.

1voto

Sol Punkte 2095

Angenommen, Sie sprechen über die OS X XCode, die gcc verwendet, um die eigentliche Kompilierung zu tun. Es sollte also keinen Unterschied zwischen dem und Linux geben, außer vielleicht unterschiedliche Versionen von gcc.

Das erste, was mir hier auffällt, ist, dass Sie "boid.h" als Namen der Datei eingegeben haben, aber "Boid.h" einschließen. Angenommen, das ist kein Tippfehler, würde ich erwarten, dass das sowohl unter Linux als auch unter OS X Probleme verursacht....

Bearbeitet, um die neue Frage zu beantworten: Hmmm... Vektor ist definitiv Teil von Xcode: /Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/vector auf meinem Rechner.

Weitere Überlegungen: Wenn man den Quellcode und die Makefiles vom Linux-Build auf den Mac portiert, kann man es wahrscheinlich einfach von der Kommandozeile aus kompilieren, genau wie unter Linux....

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X