2017-01-12 1 views
0

J'utilise Xcode 8.2 sur un mac, et j'essaie d'inclure un en-tête d'un autre projet. J'ai donné un exemple rapide à utiliser pour cette question car celle sur laquelle je travaille est trop volumineuse pour être publiée.C++ Inclure l'en-tête d'un autre projet dans xcode 8

Voici le projet que je veux inclure:

#ifndef personType_hpp 
#define personType_hpp 

#include <stdio.h> 
#include <iostream> 
#include <string> 
using namespace std; 

class personType { 

public: 
    personType(); 
    personType(string, string); 
    ~personType(); 
    void setName(string, string); 
    string getFName(); 
    string getLname(); 
    void print() const; 

private: 
    string firstName; 
    string lastName; 

}; 

#endif /* personType_hpp */ 

et le Cpp car il est:

#include "personType.hpp" 

personType::personType() { 
    firstName = ""; 
    lastName = ""; 
} 
personType::personType(string fn, string ln): firstName(fn), lastName(ln) { 
} 
personType::~personType() { 
} 

void personType::setName(string fn, string ln) { 
    firstName = fn; 
    lastName = ln; 
} 
string personType::getFName() { 
    return firstName; 
} 
string personType::getLname() { 
    return lastName; 
} 
void personType::print() const { 
    cout << firstName << " " << lastName; 
} 

Voici un simple fichier que j'ai fait juste pour montrer l'erreur que je reçois .

#include <iostream> 
#include <string> 
#include "personType.hpp" 
using namespace std; 

int main() { 
personType person1; 
    person1.setName("bob", "smith"); 
    person1.print(); 
} 

Et l'erreur que je reçois est:

warning: skipping file '/Users/idontwanttogivemyname/Desktop/C++ Projects/malikBook/malikBookEx11_3/malikBookEx11_3/personType.hpp' (unexpected file type 'sourcecode.cpp.h' in Frameworks & Libraries build phase) 

Undefined symbols for architecture x86_64: 
    "personType::setName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from: 
     _main in main.o 
    "personType::personType()", referenced from: 
     _main in main.o 
    "personType::~personType()", referenced from: 
     _main in main.o 
    "personType::print() const", referenced from: 
     _main in main.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

L'avertissement vient de me sélectionner le fichier d'en-tête au-dessus (personType.hpp) dans la section Cadres liés et bibliothèques sous l'onglet Général (faire alors m'a permis d'inclure le fichier dans le principal sans Xcode se plaindre).

En guise de déni de responsabilité: J'ai longuement étudié ce problème. Cela semble très basique car je suis sûr que de nombreux utilisateurs ont besoin d'accéder aux en-têtes d'autres parties de leur ordinateur, mais je n'ai pas été capable de trouver une réponse solide pour Xcode (au cours de l'année écoulée ...). Faites-moi savoir si je dois fournir plus d'informations.

Merci!

EDIT:

J'ai ajouté avec succès le fichier personType.cpp à la liste de compilation, mais en utilisant la même procédure, il dit qu'il ne peut pas trouver le fichier dans le grand projet que je travaillais. Voici une capture d'écran de l'exemple de projet qui a fonctionné, suivi de celui où il n'a pas fonctionné. Je ne vois aucune raison pour laquelle il ne serait pas l'inclure dans celui-ci ...

Working example

Not working...

l'erreur que je reçois est tout simplement:

/Users/idontwanttogivemyname/Desktop/C++ Projects/malikBook/malikBookGradeReportEx/malikBookGradeReportEx/studentType.hpp:15:10: 'personType.hpp' file not found 
+2

Il semble que '# include' fonctionne correctement. Vous n'êtes en quelque sorte pas en train de compiler ou de lier 'personType.cpp'. – BoBTFish

Répondre

-1

personType Les méthodes de l'artiste ne peuvent être trouvées nulle part. Oui, ils sont déclarés dans l'en-tête, mais le code réel ne peut pas être trouvé. C'est juste comme demander à quelqu'un "il y a cette chose appelée plus" et ensuite "qu'est-ce que 3 + 5?" sans vraiment leur dire comment ajouter des choses ensemble. Pour ajouter le code, vous devez compiler personType.cpp, puis compiler main.cpp et les lier ensemble.

Essayez de vérifier vos étapes de construction ou les fichiers de projet dans Xcode pour vous assurer que les codes main.cpp et personType.cpp sont compilés ensemble.

+0

Merci! Je suis allé à l'onglet des phases de construction et j'ai vérifié que les deux fichiers .cpp étaient inclus dans la section de compilation. Une telle solution simple, je savais que c'était quelque chose comme ça. –

+0

@LukeB Pas de problème. Si cela a fonctionné, n'oubliez pas de marquer ceci comme la réponse :) –

+1

Ah! Je cherchais ce bouton! –

0

Ajouter des copies des fichiers que vous souhaitez #include dans le projet que vous travaillez actuellement, pour faire en sorte que tout se compile ensemble et liés ensemble dans l'IDE. À l'heure actuelle, vous ne faites que référencer des ressources déclarées dans un en-tête, mais qui ont des implémentations dans un fichier.fichier cpp dans l'autre projet. Le code sous-jacent doit être compilé et lié correctement.