简单的c ++代码无法编译(链接器命令失败,退出代码为1)

时间:2016-11-18 05:32:22

标签: c++ xcode g++

我是C ++的新手并且正在研究Dietel的书。在本书中,它有一些类和接口的示例代码

Gradebook.h

<div class="pricing-customer col-sm-12 col-sm-3 text-center">
  <h3><?php echo $t_title; ?></h3>
  <p class="pricing-number">$ 70</p>
  <br>
  <p class="pricing-monthes">per week/month</p>
  <p class="pricing-emails">100 000 emails</p>
</div>

Gradebook.cpp

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

的main.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;
}

所以,我正在尝试使用#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终端上编译它。但似乎这不断给我一个错误说

  

架构x86_64的未定义符号:     &#34; GradeBook :: GradeBook(std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt;)&#34;,引自:         _main in main-0602c7.o   ld:找不到架构x86_64的符号   clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

除了构造函数和成员变量之外,我已经尝试去除大多数函数声明和函数实现,但它似乎仍然给了我同样的错误。

我认为我完全从书中复制了代码,但我不明白我做错了什么。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您必须编译所有来源,因此也要添加您的GradeBook类实现

InvalidOperationException

答案 1 :(得分:-1)

正如上面的例子中已经提到的,在编译代码时你必须提到两个源文件(main.cpp和GradeBook.cpp)。

这样可行。

但是,您的代码中还有一个潜在的问题。

#ifndef GradeBook_h
#define GradeBook_h


#endif /* GradeBook_h */

ifndef-endif内部没有代码。您需要将完整的代码放在ifndef-endif中的.h文件中。否则,当您处理较大的项目并且从多个地方包含GradeBook.h时,您可能会收到重新声明错误。