2009-02-10 19 views
9

Ho una classe C++ che compila bene su linux con gcc e sulle vedove in visual studio.compilare una classe C++ in Xcode: errore durante la compilazione: stl vector

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 

e in boid.cpp:

#include "Boid.h" 

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

Tuttavia, ottengo il seguente errore quando compilo questo codice in Xcode:

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

Qualche idea? Pensavo potessi prendere il codice C/C++ e compilarlo in Xcode senza problemi?

Grazie

EDIT: Aggiunto defines.h (#endif anche aggiunto a campione, ma che è stato nel codice originale)

EDIT 2: sto ottenendo un errore diverso, dopo una commentando un paio di include c'erano vuoti: l'errore vettoriale sopra.

#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 
+0

01_2_win_layer è stato commentato, mi mancavano alcune funzioni ma ora è vuoto, lo escluderò dal progetto – cbrulak

+0

Ora ricevo un errore con il vettore: "errore: vettore: nessun file o directory" – cbrulak

risposta

20

Stai includendo l'intestazione C++ in un file .m?

. I file m sono trattati come file .c con estensioni Objective-C.

file .MM vengono trattati come file cpp con estensioni Objective-C, allora si chiama Objective-C++

Basta rinominare un file .m a .MM, fare clic destro o ctrl-click e selezionare Rinomina il file in Xcode.

+0

Non ho potuto vedere l'opzione di rinomina in Xcode così ho copiato il file in Finder, rinominato in .mm, cancellato il file .m dal progetto in Xcode, e infine aggiunto il file .mm al progetto in Xcode – dumbledad

+0

Pensa al giorno d'oggi si può selezionare il file in Xcode e selezionarlo di nuovo un secondo dopo e il suo nome sarà modificabile. – epatel

0

Non sono sicuro se si è dimenticato di incollare, ma si dispone di un #ifndef non terminata

Cosa c'è dentro defines.h?

Modifica: Sembra che tu abbia trovato la soluzione. Un'altra osservazione:

#include <stdlib.h> 

per C++, per favore:

#include <cstdlib> 

: D

+0

aggiunto define.h alla domanda, inoltre, #endif è nel codice originale – cbrulak

0

Sicuramente, qualcosa in defines.h sta interessando la definizione della classe.

2

Assicurati di compilarlo come C++. Fare clic con il pulsante destro del mouse su XCode e selezionare Ottieni informazioni e assicurarsi che il tipo di file sia impostato su sourcecode.cpp.cpp per i file di implementazione.

0

L'output di esempio suggerisce 68 errori ma è stata pubblicata solo una coppia. Gli altri sono noti per essere irrilevanti?

0

Supponendo che si parli di OS X XCode, che utilizza gcc per eseguire la compilazione effettiva.Quindi non ci dovrebbero essere differenze tra questo e Linux, a parte forse le diverse versioni di gcc.

La prima cosa che mi viene in mente è che hai digitato "boid.h" come nome del file, ma stai includendo "Boid.h". Partendo dal presupposto che non è un errore di battitura, mi aspetterei che a causare problemi sia su Linux e OS X ....

cura per rispondere alla nuova domanda: Hmmm ... vettore è sicuramente parte di Xcode: /Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/vector sulla mia macchina.

ulteriori riflessioni: Se si porta la fonte e makefile dal Linux costruire verso il Mac, è possibile probabilmente solo compilarlo dalla riga di comando esattamente come si fa su Linux ....

0

Questo problema ha avuto due errori:

  • uno della mia comprende aveva un errore di battitura che ha causato un errore di compilazione
  • il vettore non trovato errore è stato fissato dai file .m per .MM
+0

Ciao cbrulak..pls fammi sapere come hai risolto il problema. – CoDe

+0

Ciao, ho accettato la risposta corretta (dopo il tuo commento). scusa per il ritardo – cbrulak

15

Senza modificare alcun file .m in .mm o qualcosa del genere, se si fa clic sul progetto, fare clic su taget-> build settings fino a "LLVM GCC 4.2 - Languages" (nuovo xcode dice "Apple LLVM compiler 4.2 ") vedrà Compile Sources As modificare tale valore in Objective-C++;

+0

Grazie, ha fatto il trucco! – Anila

+2

Vorrei poter sopravvivere più di una volta! :) Grazie. – BruceHill