如何修复C++编译时出现的gcd(long, long)未定义引用错误
「undefined reference to
gcd(long, long)」报错修复方案 错误原因
该报错属于链接阶段错误:你在gcd.h中声明了gcd(long, long)函数的签名,编译器编译gcd.cc时能找到这个声明、通过语法检查,但链接阶段找不到该函数的具体实现代码,因此抛出错误。
修复方案
你可以二选一以下两种方案:
方案1:自定义实现gcd函数
- 首先修正
gcd.cc中的头文件引用错误:自定义头文件需要用双引号而非尖括号(尖括号默认搜索系统头文件目录),将第一行改为:
#include "gcd.h"
- 新增
gcd.cpp文件,编写gcd函数的实现逻辑:
#include "gcd.h" long gcd(long a, long b) { // 欧几里得算法实现 while (b != 0) { long temp = b; b = a % b; a = temp; } return a; }
- 编译时将所有源文件一同传入编译器,示例g++编译命令:
g++ gcd.cc gcd.cpp -o gcd_calc
方案2:使用C++17标准库内置gcd
C++17及更高版本的标准库已经内置了gcd实现,无需自己编写函数:
- 删掉你自定义的
gcd.h文件,修改gcd.cc代码如下:
#include <iostream> #include <numeric> // 标准库gcd所在头文件 using namespace std; int main() { long a,b; cout << "Enter the first number ---> "; cin >> a; cout << "Enter the second number ---> "; cin >> b; cout <<"The gcd of " << a << " and " << b << " is " << gcd(a, b) << endl; return 0; }
- 编译时指定C17标准,示例g编译命令:
g++ gcd.cc -std=c++17 -o gcd_calc
注意事项
- 如果未写
using namespace std;,调用标准库gcd时需要写全std::gcd - 低版本编译器可能不支持C++17标准,优先选择方案1兼容性更好
内容的提问来源于stack exchange,提问作者Fresh Programmer
相关产品推荐
相关产品推荐

