web-dev-qa-db-fra.com

Erreur de compilation <string> introuvable> dans Xcode 4.2

Je reçois une erreur de compilation include not found in XCode. J'ai un projet d'application iOS que j'utilise comme Objective-c et c ++. 

Initialement, j'ai créé un fichier .h et un fichier .cpp dans mon projet ios. Ensuite, j'ai renommé le fichier .cpp en fichier .mm.

Voici mon fichier .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'est-ce que je rate? Dois-je ajouter la bibliothèque std c ++ à ma cible? Quelque chose en rapport avec les chemins d'en-tête de recherche?

J'ai juste besoin d'utiliser un type de chaîne.

Merci beaucoup d'avance

15
ilker Acar

sélectionnez projet -> paramètre de construction -> compilateur Apple LLVM 5.1 -> langue

Dans Compile Sources As, remplacez par Objective-C++

8
AmyG

Il y a une bizarrerie dans XCode. Je l'ai remarqué en 7.3. La plupart des projets reconnaissent les fichiers .mm et le fichier STL, alors qu'un projet que je n'avais pas fait. Le correctif était que je devais cliquer sur l'icône du projet en haut à gauche, puis sur Cibles> Construire les phases> Lier les fichiers binaires avec les bibliothèques> et ajouter AppKit.framework. Ensuite, je devais cliquer sur Cibles> Paramètres de construction> rechercher sur "Compiler les sources" et le définir sur "Objective C++" sur toutes les colonnes possibles. Ensuite, effectuez un nettoyage puis une construction à partir du menu Produit. Ceci compilé correctement alors. Revenez ensuite à cette source de compilation et réglez-le sur "Selon le type de fichier" dans toutes les colonnes possibles. Ensuite, cliquez à nouveau sur Construire dans le menu Produit. À ce stade, il a été compilé correctement et m'a permis d'utiliser l'option "en fonction du type de fichier", ce que j'aime mieux.

Oh, et si vous faites des choses dans Cocoa, n'oubliez pas d'ajouter l'en-tête suivant dans vos fichiers:

#import <Cocoa/Cocoa.h>

Et si vous faites des commandes en ligne de commande, n'oubliez pas d'ajouter ce qui suit à la place de l'en-tête Cocoa:

#import <Foundation/Foundation.h>
4
Volomike

je crois que vous devez inclure tout le chemin d'accès à la bibliothèque. de même pour dire "fondation" et "uiview" cadres.

#import <Foundation/Foundation.h>

ou

#import <UIKit/UIKit.h>

et oui, assurez-vous d’ajouter la bibliothèque à votre cible.

1
DoS

Je rencontrais donc ce problème avec la bibliothèque Bypass de Cocoapods et aucune de ces solutions n’apportait rien. Le problème était avec un fichier créé par Cocoapods appelé un en-tête de parapluie. Ceci est situé dans <POD_NAME>/Support Files/<POD_NAME>-umbrella.h. Supprimez-le, et il devrait construire correctement.

Maintenant, expliquez pourquoi cela est nécessaire: l’en-tête de parapluie mélange le code C++ et le code Objective-C directement dans un en-tête qui est apparemment un grand non-non et finit par casser complètement les importations C++. En l’enlevant (ce qui semble n’avoir aucun effet?), Cette importation conflictuelle que les Cocoapods ont créée à leur insu disparaîtra.

0
Sirens