2017-01-12 24 views
0

MacでXcode 8.2を使用していますが、別のプロジェクトのヘッダーを挿入しようとしています。私が作業しているものが投稿するには大きすぎるので、この質問に使用するための簡単な例を作成しました。ここで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)上記のヘッダファイルを選択し、私から来ている(やっXcodeを使わずにメインにファイルを含めることができました)。

免責事項として:私はこの問題をかなり広く捜しています。多くのユーザーが自分のコンピュータの他の部分からヘッダーにアクセスする必要があると確信しているので、非常に基本的なようですが、私はXcodeの確かな答えを見つけることができませんでした。それ以上の情報を提供する必要がある場合はお知らせください。

ありがとうございます!

EDIT:

は、私が正常にコンパイルリストにpersonType.cppファイルを追加しましたが、今と同じ手順を使用している、それは私が働いていた大きなプロジェクト内のファイルを見つけることができないと言います。ここでは、それがうまくいったサンプルプロジェクトのスクリーンショットと、それがなかったプロジェクトのスクリーンショットがあります。

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

'#include'はうまく動作しているようです。あなたは何らかの形で 'personType.cpp'をコンパイルまたはリンクしていません。 – BoBTFish

答えて

-1

personType:それはこの1つに含めていないだろう、なぜ私は私が取得していますエラーが単純である

Working example

Not working...

...何らかの理由が表示されませんその方法はどこにも見つからない。はい、ヘッダーに宣言されていますが、実際のコードは見つかりません。それは誰かに「プラスと呼ばれるものがあります」、次に「3 + 5は何ですか?」と尋ねるのと同じです。実際に一緒に物を追加する方法を彼らに伝えることなく。

コードを追加するには、personType.cppをコンパイルし、main.cppをコンパイルしてリンクする必要があります。

Xcodeでビルドステップやプロジェクトファイルを確認して、main.cpppersonType.cppが一緒にコンパイルされていることを確認してください。

+0

ありがとうございます!私はビルド段階のタブに行き、2つの.cppファイルがコンパイルセクションに含まれていることを確認しました。そのような単純な修正は、私はそれがそれのようなものであることを知っていた。 –

+0

@LukeB問題ありません。それがうまくいけば、答えとしてマークすることを忘れないでください:) –

+1

ああ!私はそのボタンを探していた! –

0

あなたはすべてが一緒にをコンパイルし、IDEで一緒をリンクされることを保証するために、あなたが現在取り組んでいるプロジェクトにインクルード(#include)したいファイルのコピーを追加します。

現在のところ、ヘッダーで宣言されたアセットを参照しているに過ぎませんが、実装は。他のプロジェクトのcppファイル。基礎となるコードは適切にコンパイルしてリンクする必要があります。

関連する問題