【问题标题】:simple c++ code does not compile (linker command failed with exit code 1)简单的 c++ 代码无法编译(链接器命令失败,退出代码为 1)
【发布时间】:2016-11-18 05:32:21
【问题描述】:

我是 C++ 新手,正在学习 Dietel 的书。书上有一些类和接口的示例代码

成绩簿.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;
};

成绩簿.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 编译它。但似乎这经常给我一个错误,说

架构 x86_64 的未定义符号: “GradeBook::GradeBook(std::__1::basic_string, std::__1::allocator >)”,引用自: _main 在 main-0602c7.o ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

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

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

【问题讨论】:

标签: c++ xcode g++


【解决方案1】:

您必须编译所有源代码,所以也要添加您的 GradeBook 类实现

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

【讨论】:

    【解决方案2】:

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

    这会起作用。

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

    #ifndef GradeBook_h
    #define GradeBook_h
    
    
    #endif /* GradeBook_h */
    

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

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 2015-08-06
      • 2012-05-27
      • 1970-01-01
      相关资源
      最近更新 更多