2009-02-10 5 views
9

Tengo una clase de C++ que compila bien en Linux con gcc y en viudas en Visual Studio.compilando una clase de C++ en Xcode: error durante la compilación: 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 

y en boid.cpp:

#include "Boid.h" 

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

Sin embargo, me sale el siguiente error al compilar este código en Xcode:

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

¿Algunas ideas? Pensé que podrías tomar el código C/C++ y compilarlo en Xcode sin problemas.

Gracias

EDIT: Añadido defines.h (#endif también añadido a la muestra, pero eso fue en el código original)

EDIT 2: Estoy recibiendo un error diferente después de una comentar un par de incluye que había vacío: el error de vector anterior.

#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

win_layer está comentado, me faltaban algunas funciones, pero está vacío ahora, voy a excluirlo del proyecto – cbrulak

+0

Ahora me sale un error con el vector: "error: vector: No existe ese archivo o directorio" – cbrulak

Respuesta

20

¿Está incluyendo el encabezado C++ en un archivo .m?

.m Los archivos se tratan como archivos .c con extensiones Objective-C.

archivos .MM se tratan como archivos .cpp con extensiones de Objective-C, entonces se llama Objective-C++

Sólo cambiar el nombre de cualquier archivo .m a .MM, haga clic o Ctrl + clic y seleccione Cambiar nombre de el archivo en Xcode.

+0

No pude ver la opción de cambio de nombre en Xcode, así que copié el archivo en Finder, lo renombré a .mm, eliminé el archivo .m de la proyecto en Xcode, y finalmente agregado el archivo .mm al proyecto en Xcode – dumbledad

+0

Piense hoy en día que uno puede seleccionar el archivo en Xcode y seleccionarlo nuevamente un segundo más tarde y luego su nombre será editable. – epatel

0

No está seguro de si se olvidó de pegar, pero tiene una #ifndef sin terminar

Qué hay dentro defines.h?

Editar: Parece que has encontrado la solución. Una observación más:

#include <stdlib.h> 

para C++, por favor:

#include <cstdlib> 

: D

+0

agregó define.h a la pregunta, también, #endif está en el código original – cbrulak

0

Definitivamente, algo en defines.h está afectando a la definición de clase.

2

Asegúrese de compilarlo como C++. Haga clic con el botón derecho en el archivo en XCode y seleccione Obtenga información y asegúrese de que Tipo de archivo esté configurado en sourcecode.cpp.cpp para los archivos de implementación.

0

Su salida de ejemplo sugiere 68 errores pero solo ha publicado un par. ¿Se sabe que los demás son irrelevantes?

0

Suponiendo que está hablando del OS X XCode, que utiliza gcc para hacer la compilación real.Entonces no debería haber diferencia entre eso y Linux, a excepción de las diferentes versiones de gcc.

Lo primero que salta a la vista aquí es que ha escrito "boid.h" como el nombre del archivo, pero está incluyendo "Boid.h". Suponiendo que no sea un error tipográfico, esperaría que cause problemas tanto en Linux como en OS X ....

Editado para responder la nueva pregunta: Hmmm ... vector es definitivamente parte de Xcode: /Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/vector en mi máquina.

Además pensamiento: Si el puerto de la fuente y los archivos make de la Linux construye a la Mac, probablemente puede compilar desde la línea de comando exactamente como se hace en Linux ....

0

Este problema tuvo dos errores:

  • uno de mi incluye tenía un error que provocó un error de compilación
  • el vector no se encuentra el error fue fijado por los archivos .m a .MM
+0

hi cbrulak..pls déjame saber cómo resolviste el problema. – CoDe

+0

Hola, acepté la respuesta correcta (después de tu comentario). perdón por la demora – cbrulak

15

Sin cambiar ningún .m a .mm o algo por el estilo, si hace clic en su proyecto, haga clic en tagets-> configuración de compilación hasta "LLVM GCC 4.2 - Idiomas" (nuevo xcode dice "Apple LLVM compilador 4.2 ") verá Fuentes de compilación Como cambie ese valor a Objetivo-C++;

+0

¡Gracias, eso funcionó! – Anila

+2

¡Ojalá pudiera votar más de una vez! :) Gracias. – BruceHill

Cuestiones relacionadas