簡體   English   中英

簡單的c ++代碼無法編譯(鏈接器命令失敗,退出代碼為1)

[英]simple c++ code does not compile (linker command failed with exit code 1)

我是C ++的新手,正在學習Dietel的書。 在書上,它有一些關於類和接口的示例代碼

成績簿

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

成績簿

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

}

所以,我試圖使用g++ main.cpp -o example.out在我的mac終端上編譯它。 但這似乎不斷給我一個錯誤,說

體系結構x86_64的未定義符號:“ GradeBook :: GradeBook(std :: __ 1 :: basic_string,std :: __ 1 :: allocator>)”,引用自:main-0602c7.o ld中的:找不到以下符號:體系結構x86_64 clang:錯誤:鏈接器命令失敗,退出代碼為1(使用-v查看調用)

我試圖擺脫除構造函數和成員變量以外的大多數函數聲明和函數實現,但是它似乎仍然給我同樣的錯誤。

我想我完全是從書中復制了代碼,但是我不明白我在做什么錯。 任何幫助,將不勝感激。

您必須編譯所有源代碼,因此也要添加GradeBook類實現

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

如上面的示例中已經提到的,在編譯代碼時,您必須同時提及兩個源文件(main.cpp和GradeBook.cpp)。

這將起作用。

但是,您的代碼中還有一個潛在的問題。

#ifndef GradeBook_h
#define GradeBook_h


#endif /* GradeBook_h */

ifndef-endif保護內部沒有代碼。 您需要將完整的代碼放在ifndef-endif內的.h文件中。 否則,當您處理較大的項目時,並且從多個位置包含GradeBook.h時,您可能會收到重新聲明錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM