2012-04-26 18 views
14

Recibo un error de compilación de la opción no encontrada en XCode. Tengo un proyecto de aplicación iOS que uso Objective-c y C++ como mezcla.Incluir <string> error de compilación no encontrado encontrado en Xcode 4.2

Inicialmente, creé un archivo .h y un archivo .cpp en mi proyecto ios. Luego, renombré el archivo .cpp al archivo .mm.

Aquí está mi archivo .h;

TestLog.h

#ifndef CalculatorDemo_TestLog_h 
#define CalculatorDemo_TestLog_h 
#include <string> 
using namespace std; 

class TestLog 
{ 
private: 
    string logString; 
public: 
    void Log(string logMessage); 
}; 


#endif 

TestLog.mm

#include "TestLog.h" 

void TestLog::Log(string logMessage) 
{ 
    //this->logString->append(logMessage); 

} 

¿Qué me falta? ¿Debo agregar una biblioteca std C++ a mis targetS? ¿Algo relacionado con las rutas del encabezado de búsqueda?

Solo necesito usar el tipo de cadena.

Gracias mucho por adelantado

+0

Sin duda parece que * debería * funcionar ... Pero, ¿hay alguna razón por la que no esté utilizando 'NSString' en su lugar? –

+0

parece que XCode no incluye las rutas estándar de forma predeterminada, supongo que debe hacerlo manualmente. También evite usar en archivos .h hágalo en el archivo de implementación o no lo use en absoluto. – AlexTheo

Respuesta

4
+0

Para las aplicaciones que necesitan usar el código C++ (y las bibliotecas estándares de C++), ¡esta es una lectura obligada! Es bastante difícil encontrar esta respuesta, pero maldita sea, ¡me ha ayudado más de una vez! ¡Gracias! : D – javatarz

+1

Alguna descripción del problema sería bienvenida en este hilo. – AbiusX

+1

Responda la pregunta en su respuesta, en lugar de simplemente publicar un enlace que puede pudrirse en un foro con muchas (algunas inutilizables) respuestas. –

1

creo que es necesario incluir toda la ruta a la biblioteca. de manera similar decir "fundación" & marcos de trabajo "uiview".

#import <Foundation/Foundation.h> 

o

#import <UIKit/UIKit.h> 

y sí, asegúrese de añadir la biblioteca a su objetivo.

5

Proyecto selecto -> estructura Ajuste -> manzana LLVM compilador 5,1 -> Idioma

En Compile Sources As cambio a Objective-C++

2

Hay una peculiaridad en XCode. Lo noté en 7.3. La mayoría de los proyectos reconocen archivos .mm y STL, mientras que un proyecto que yo tenía no. La solución fue que tuve que hacer clic en el icono del proyecto de la parte superior izquierda, luego hacer clic en Metas> Fases de compilación> Enlace binario con bibliotecas> y agregar en AppKit.framework. Luego, tuve que hacer clic en Objetivos> Configuraciones de compilación> buscar en "Compilar fuentes" y configurarlo en "Objetivo C++" en todas las columnas posibles. Luego, haga un Limpiar y luego una compilación en el menú Producto. Esto compilado correctamente entonces. Luego, regrese a las fuentes de compilación de nuevo y configúrelo de nuevo en "Según el tipo de archivo" en todas las columnas posibles. A continuación, haz clic en Crear en el menú Producto nuevamente. En ese momento, compiló correctamente y me permitió utilizar la opción "según el tipo de archivo", que me gusta más.

Ah, y si al hacerlo cacao cosas, no se olvide de añadir el siguiente encabezado en sus archivos:

#import <Cocoa/Cocoa.h> 

Y si haciendo cosas de línea de comandos, no se olvide de añadir el siguiente en lugar de la cabecera de cacao:

#import <Foundation/Foundation.h> 
+0

¡Gran respuesta! ¡Gracias! Pensé que estaba perdiendo la cabeza ... Actualicé mi xcode de 7 a 8 y, de repente, mi código C++ NO fue reconocido ... ¡Gracias! – NpC0mpl3t3

0

Así que yo estaba teniendo este problema con la biblioteca de derivación Cocoapods y ninguna de estas soluciones hizo nada. El problema era con un archivo creado por Cocoapods llamado encabezado paraguas. Esto se encuentra en <POD_NAME>/Support Files/<POD_NAME>-umbrella.h. Eliminarlo, y debe construir bien.

Ahora para la explicación de por qué esto es necesario: el encabezado del paraguas mezcla código C++ y Objective-C directamente en un encabezado que aparentemente es un gran no-no y termina rompiendo completamente las importaciones de C++. Al eliminarlo (¿qué parece no tener ningún efecto?) Esta importación conflictiva que Cocoapods creó inconscientemente desaparecerá.

Cuestiones relacionadas