2016-11-18 11 views
0

私はC++を初めて使い、Dietelの本を勉強しています。この本では、それはI、クラスおよびインタフェースシンプルなC++コードがコンパイルされない(終了コード1でリンカコマンドが失敗しました)

Gradebook.hので

#ifndef GradeBook_h 
#define GradeBook_h 


#endif /* GradeBook_h */ 


#include <string> 

class GradeBook 
{ 
    public: 
    explicit GradeBook(std::string); 
    void setCourseName(std::string); 
    std::string getCourseName() const; 
    void displayMessage() const; 

private: 
    std::string courseName; 
}; 

Gradebook.cpp

#include <iostream> 
#include "GradeBook.h" 

using namespace std; 


GradeBook::GradeBook(string name) 
{ 
    courseName = name; 
} 

void GradeBook::setCourseName(string name) 
{ 
    courseName = name; 
} 

string GradeBook::getCourseName() const 
{ 
    return courseName; 
} 

void GradeBook::displayMessage() const 
{ 
    std::cout << "Welcome to the grade book for " << getCourseName() << std::endl; 
} 

main.cppに

#include <iostream> 
#include "GradeBook.h" 

using namespace std; 

int main() 
{ 
    GradeBook gradeBook1("CS 101 Introduction to C++ Programming"); 
    GradeBook gradeBook2("CS 102 Data Structures in C++"); 

    cout << "gradeBook1 : " << gradeBook1.getCourseName() << endl; 
    cout << "gradeBook2 : " << gradeBook2.getCourseName() << endl; 

} 

のためのいくつかのサンプルコードを持っています私のMAC端末でg++ main.cpp -o example.outを使ってこれをコンパイルしようとしています。しかし、常に私に

Undefined symbols for architecture x86_64: "GradeBook::GradeBook(std::__1::basic_string, std::__1::allocator >)", referenced from: _main in main-0602c7.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

私は関数宣言とコンストラクタとメンバ変数を除く機能の実装のほとんどを取り払う試みているというエラーを与えているようだが、それは私に与えているように見えますそれでも同じエラー。

私は本から正確にコードをコピーしたと思いますが、私が間違っていることは分かりません。どんな助けもありがとう。

+0

[定義されていない参照/未解決の外部シンボルのエラーとは何ですか?どうすれば修正できますか?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-外部記号エラー・アンド・ハウ・ド・イ・フィックス) – Danh

答えて

1

あなたはすべてのソースをコンパイルする必要がありますので、あなたの評定表クラスの実装があまりにも既に上記の例で述べた

g++ main.cpp GradeBook.cpp -o example.out 
      ~~~~~~~~~~~~~ 
-1

Asを追加し、あなたがソースファイル(main.cppにとGradeBook.cpp)の両方を言及する必要がありコードをコンパイルします。

これは動作します。

ただし、コードに潜在的な問題がもう1つあります。

#ifndef GradeBook_h 
#define GradeBook_h 


#endif /* GradeBook_h */ 

ifndef-endif guardの内部にコードはありません。完全なコードをifndef-endifの.hファイルに入れる必要があります。それ以外の場合は、大きなプロジェクトで作業し、GradeBook.hが複数の場所からインクルードされると、再宣言エラーが発生する可能性があります。

関連する問題