2017-01-12 4 views
0

Ich benutze Xcode 8.2 auf einem Mac, und ich versuche, eine Überschrift aus einem anderen Projekt aufzunehmen. Ich habe ein kurzes Beispiel für diese Frage verwendet, da die, an der ich gerade arbeite, zu groß ist, um sie zu posten.C++ Include Header aus einem anderen Projekt in xcode 8

Hier ist das Projekt, das ich schließen möchte:

#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 */ 

und die CPP für sie ist:

#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; 
} 

Hier ist eine einfache Datei, die ich gerade gemacht, den Fehler zeigen Ich erhalte .

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

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

Und der Fehler I bin immer:

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) 

Die Warnung kommt von mir oben (personType.hpp) die Header-Datei auszuwählen, die in dem verknüpften Frameworks und Bibliotheken Abschnitt unter dem Registerkarte Allgemein (tun so erlaubt mir, die Datei im Wesentlichen ohne Xcode beschweren).

Als Disclaimer: Ich habe dieses Problem ziemlich ausführlich gegooglet. Es scheint sehr einfach zu sein, da ich sicher bin, dass viele Benutzer auf Header von anderen Teilen ihres Computers zugreifen müssen, aber ich konnte keine solide Antwort für Xcode finden (innerhalb des letzten Jahres ...). Lassen Sie mich wissen, wenn ich weitere Informationen zur Verfügung stellen muss.

Danke!

EDIT:

Ich habe erfolgreich die personType.cpp Datei an die Kompilierung-Liste hinzugefügt, aber jetzt nach dem gleichen Verfahren, sagt es die Datei nicht in dem großen Projekt finden kann ich gerade arbeite. Hier ist ein Screenshot des Beispielprojekts, in dem es funktioniert hat, gefolgt von dem Beispiel, in dem es nicht funktioniert hat. Ich sehe keinen Grund, warum es nicht in diesem enthalten würde ...

Working example

Not working...

der Fehler ich erhalte ist einfach:

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

Es scheint, dass die '# include' funktioniert gut. Sie kompilieren oder verbinden irgendwie 'personType.cpp' nicht. – BoBTFish

Antwort

-1

personType Methoden können nirgendwo gefunden werden. Ja, sie sind in der Kopfzeile deklariert, aber der eigentliche Code dafür kann nicht gefunden werden. Es ist, als würde man jemanden fragen: "Da ist dieses Ding, das man Plus nennt" und dann "Was ist 3 + 5?" ohne ihnen zu sagen, wie man Dinge zusammenfügt. Um den Code hinzuzufügen, müssen Sie personType.cpp kompilieren und dann main.cpp kompilieren und sie miteinander verknüpfen.

Versuchen Sie, Ihre Build-Schritte oder Projektdateien in Xcode zu überprüfen, um sicherzustellen, dass main.cpp und personType.cpp zusammen kompiliert werden.

+0

Vielen Dank! Ich ging zur Registerkarte "Buildphasen" und stellte sicher, dass die beiden CPP-Dateien in den Kompilierabschnitt aufgenommen wurden. Solch eine einfache Lösung, ich wusste, dass es so etwas war. –

+0

@Lukeb Kein Problem. Wenn es funktioniert, vergiss nicht, dies als Antwort zu markieren :) –

+1

Ah! Ich suchte nach dem Knopf! –

0

fügen Sie Kopien der Dateien, die Sie in das Projekt # include wollen Sie gerade arbeiten, dass alles, um sicherzustellen, wird zusammen kompiliert und verknüpft zusammen in der IDE.

Im Moment verweisen Sie nur auf Assets, die in einem Header deklariert wurden, aber Implementierungen in einem.CPP-Datei im anderen Projekt. Der zugrunde liegende Code muss korrekt kompiliert und verknüpft sein.

Verwandte Themen