2011-09-25 8 views
8

Estoy tratando de compilar una aplicación de cacao en Xcode 4.0 y estoy recibiendo este error ...errores de compilación con # include <string> en Cocoa App

fatal error: 'string' file not found 

... cuando se trata de compilar a .PCH presentar en esta línea:

#include <string> 

tengo otro proyecto Xcode que hace lo mismo, pero no recibe el error. Revisé la configuración de compilación para algunos diferentes, pero no puedo encontrar ninguno. La única diferencia es que el proyecto que compila OK se inició como un proyecto de línea de comando, no como un proyecto de Cocoa, pero la configuración de compilación es la misma.

El objetivo OS es Mac OS X 10.6

pasa el error al compilar el encabezado precompilado y no llegar a cualquiera de los otros archivos. El único marco que tiene la versión compiladora es Foundation.framework y el que no compila también.

¿Por qué no se encuentra en un proyecto y no en el otro? ¿Algún consejo?

+0

¿En qué lenguaje de programación está escrita su aplicación? ¿No es '' una cosa de C++, no una cosa de Objective-C? –

+1

Puede usar stl en objective-C++. Simplemente nombra tus archivos .mm. Empecé de nuevo con este proyecto desde una nueva plantilla de aplicación de cacao y funciona bien ahora. –

Respuesta

0

string es un encabezado C++ (para std :: cadena). Si está buscando cosas como strcpy, debe incluir string.h

13

¿Cuál es la extensión de sus archivos fuente? Si es ".m", intente cambiarlo a obj-cpp ".mm", de modo que Xcode deducirá el idioma correcto. O simplemente poner C++ - cabeceras específicas dentro "#ifdef __cplusplus" bloque

actualización

El protector debe existir para cada lenguaje compilado en el proyecto ya que este es específica incluyen en el PCH. IOW, si fuera todo C++ y/o objC++, no habría error. Evidentemente, hay al menos un archivo que no reconoce C++ (por ejemplo, las fuentes C u ObjC también se compilan en el destino). Por lo tanto, simplemente lo protege de la siguiente manera:

// MONPrefix.pch 

#ifdef __cplusplus 
#include <string> 
#endif 

// same for objc, so your C and C++ sources compile with no error: 
#ifdef __OBJC__ 
#include <Foundation/Foundation.h> 
#endif 
+0

+1 * "simplemente ponga los encabezados específicos de C++ dentro" #ifdef __cplusplus "bloque" * - es la solución correcta - pero la protección debe existir para cada idioma compilado en el proyecto porque este include específico está en el pch. por el contrario, si fuera todo C++ y/o objC++, no habría error. evidentemente, hay al menos un archivo que no reconoce C++ (por ejemplo, c u objc). me actualizaré - ahora veo que esto es meses de edad :) – justin

+0

Esto me ayudó a descubrir cómo configurar correctamente un Prefix.pch para un proyecto Cocos2D-X. Envolver las cosas específicas de C++ en "#ifdef __cplusplus" funciona como un amuleto. –

Cuestiones relacionadas