2017-01-12 12 views
0

Я использую Xcode 8.2 на Mac, и я пытаюсь включить заголовок из другого проекта. Я сделал быстрый пример для использования для этого вопроса, поскольку тот, над которым я работаю, слишком велик, чтобы опубликовать его.C++ Включение заголовка из другого проекта в xcode 8

Вот проект, который я хочу, чтобы включить:

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

и .cpp для него является:

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

Вот простой файл я сделал просто, чтобы показать ошибку я получаю ,

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

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

И ошибка я получаю:

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) 

Предупреждение исходит от меня выбора файла заголовка выше (personType.hpp) в Linked библиотеки и фреймворки разделе на вкладке Общие (делает поэтому мне удалось включить файл в основной файл без жалобы Xcode).

Как отказ от ответственности: я довольно широко искал эту проблему. Это кажется очень простым, так как я уверен, что многие пользователи должны получать доступ к заголовкам из других частей своего компьютера, но я не смог найти надежный ответ для Xcode (в течение прошлого года ...). Дайте мне знать, если мне нужно предоставить дополнительную информацию.

Спасибо!

EDIT:

Я успешно добавлен файл personType.cpp в список компиляции, но теперь используют ту же процедуру, он говорит, что не может найти файл в большом проекте я работал. Вот скриншот примерного проекта, в котором он работал, а затем тот, где он этого не сделал. Я не вижу никаких причин, почему она не будет включать его в этом ...

Working example

Not working...

ошибка я получаю просто:

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

Кажется, что '# include' работает нормально. Вы каким-то образом не компилируете или не связываете 'personType.cpp'. – BoBTFish

ответ

-1

personType методы не могут быть найдены нигде. Да, они объявлены в заголовке, но фактический код для него не найден. Это точно так же, как спросить кого-то «есть эта вещь плюс», а затем «что такое 3 + 5?» не сообщая им, как добавлять вещи вместе.

Чтобы добавить код, вам необходимо скомпилировать personType.cpp, а затем скомпилировать main.cpp и связать их вместе.

Попробуйте проверить шаги сборки или файлы проекта в Xcode, чтобы убедиться, что оба файла main.cpp и personType.cpp скомпилированы вместе.

+0

Спасибо! Я перешел на вкладку фаз сборки и обеспечил, чтобы два файла .cpp были включены в раздел компиляции. Такое простое решение, я знал, что это что-то вроде этого. –

+0

@ LukeB проблем нет. Если это сработало, не забудьте отметить это как ответ :) –

+1

Ах! Я искал эту кнопку! –

0

Добавить копии файлов, которые вы хотите #include в проект, который вы сейчас работаете, чтобы убедиться, что все компилируется вместе и связаны вместе в IDE.

На данный момент вы просто ссылаетесь на активы, которые были объявлены в заголовке, но имеют реализации в a.cpp-файл в другом проекте. Основной код должен быть скомпилирован и правильно связан.