在 macOS 上用 C++ 构建的未定义符号

Undefined symbols building in C++ on macOS

在 macOS 10.15 上实现 class 成员函数 in.cpp 文件时,显示错误:

clang: Undefined symbols for architecture x86_64:error:

"Circle::Area()", referenced from:
      _main in main-4cfa92.o

"Circle::Circle(double)", referenced from:
      _main in main-4cfa92.o

linker command failed with exit code 1 (use -v to see invocation)

为了验证这种情况,我在网站上找到了一个例子来尝试,当我将函数定义从 Circle.cpp 文件复制到 Circle.h 文件时它工作正常,但是当函数声明分别在Circle.h和函数定义在Circle.cpp个文件中,出现错误

//Circle.h

#ifndef CIRCLE_H
#define CIRCLE_H

class Circle
{
private:
    double r;//radius
public:
    Circle();//constructor
    Circle(double R);//The constructor
    double Area();//computing area
};

#endif
//Circle.cpp

#include "Circle.h"

Circle::Circle(){
    this->r=5.0;
}
Circle::Circle(double R){
    this->r=R;
}
double Circle::Area(){
    return 3.14*r*r;
}
//main.cpp

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

using namespace std;

int main(){
    Circle c(3);
    cout<<"Area="<<c.Area()<<endl;
    return 0;
}

错误信息:

Undefined symbols for architecture x86_64:
  "Circle::Area()", referenced from:
      _main in main-4cfa92.o
  "Circle::Circle(double)", referenced from:
      _main in main-4cfa92.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

您似乎没有在编译步骤中包含 Circle.cpp。确保同时包含 main.cppCircle.cpp