在 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.cpp
和 Circle.cpp
在 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.cpp
和 Circle.cpp