Kompilieren einer C ++ - Klasse in Xcode: Fehler während der Kompilierung: STL -Vektor

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

  •  22-08-2019
  •  | 
  •  

Frage

Ich habe eine C ++ - Klasse, die auf Linux mit GCC und Witwen in Visual Studio gut 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 ihn ohne Probleme in Xcode kompilieren?

Vielen Dank

BEARBEITEN: Fügte defines.h (auch #endif hinzu, das Beispiel hinzugefügt wurde, aber das war im ursprünglichen Code)

Bearbeiten 2: Ich erhalte einen anderen Fehler, nachdem ein paar Einschlüsse dort leer waren: Der vektorische Fehler oben.

#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
War es hilfreich?

Lösung

Geben Sie den C ++ - Header in eine .m -Datei ein?

.M-Dateien werden als .c-Dateien mit objektiven C-Erweiterungen behandelt.

.mm-Dateien werden als .CPP-Dateien mit Objektiv-C-Erweiterungen behandelt und dann als Objektive-C ++ bezeichnet

Benennen Sie einfach jede .m-Datei in .mm, klicken Sie mit der rechten Maustaste oder auf Strg-Klicken und wählen Sie in der Datei in Xcode um.

Andere Tipps

Klicken Sie auf TAGETE-> Erstelleneinstellungen, ohne auf Ihr Projekt zu klicken, ohne dass .m auf .mm oder ähnliches zu wechseln. "LLVM GCC 4.2 - Sprachen" (New Xcode sagt "Apple LLVM Compiler 4.2") du wirst sehen Quellen kompilieren als ändern diesen Wert in Ziel-C ++;

Stellen Sie sicher, dass Sie es als C ++ zusammenstellen. Klicken Sie mit der rechten Maustaste auf die Datei in Xcode und wählen Sie Informationen bekommen und stellen Sie sicher, dass das Dateityp ist eingestellt auf SourceCode.cpp.cpp Für die Implementierungsdateien.

Ich hoffe, das wird helfen. Nachdem ich Xcode auf Version 10 aktualisiert hatte, hatte ich Probleme, einschließlich <Map> und <Vector> Bibliotheken. Ich habe eine einfache Lösung gefunden, indem der C ++ - Bibliothekstyp in den Build -Einstellungen des Projekts geändert wird (Zieleinstellungen des Ziels):

C ++ Standardbibliothek: LIBC ++ (LLVM C ++ Standardbibliothek mit C ++ 11 Unterstützung)

Ohne Probleme zusammengestellt.

Auf jeden Fall beeinflusst etwas in Defines.h die Klassendefinition.

Dieses Problem hatte zwei Fehler:

  • Einer von mir hatte einen Tippfehler, der einen Kompilierfehler verursachte
  • Der nicht gefundene Fehler wurde durch die .m -Dateien auf .mm behoben

Angenommen, Sie sprechen über den OS X Xcode, der GCC zum tatsächlichen Kompilieren verwendet. Es sollte also keinen Unterschied zwischen diesem und Linux geben, außer vielleicht unterschiedlichen Versionen von GCC.

Das erste, was mich hier herausspringt, ist, dass Sie "boid.h" als Name der Datei eingegeben haben, aber Sie enthalten "boid.h". Angenommen, das ist kein Tippfehler, würde ich erwarten, dass dies sowohl bei Linux als auch auf 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 meiner Maschine.

Weitere Gedanken: Wenn Sie die Quelle und Makefiles aus dem Linux -Build zum Mac portieren, können Sie sie wahrscheinlich einfach wie unter Linux aus der Befehlszeile kompilieren.

Ich bin mir nicht sicher, ob Sie vergessen haben, einzufügen, aber Sie haben eine unerleumte #ifndef

Was ist drin definiert.h ?

Bearbeiten: Sie scheinen die Lösung gefunden zu haben. Noch eine Bemerkung:

#include <stdlib.h>

Für C ++ bitte:

#include <cstdlib>

:D

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top