You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复C++编译时出现的gcd(long, long)未定义引用错误

「undefined reference to gcd(long, long)」报错修复方案

错误原因

该报错属于链接阶段错误:你在gcd.h中声明了gcd(long, long)函数的签名,编译器编译gcd.cc时能找到这个声明、通过语法检查,但链接阶段找不到该函数的具体实现代码,因此抛出错误。

修复方案

你可以二选一以下两种方案:

方案1:自定义实现gcd函数

  1. 首先修正gcd.cc中的头文件引用错误:自定义头文件需要用双引号而非尖括号(尖括号默认搜索系统头文件目录),将第一行改为:
#include "gcd.h"
  1. 新增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;
}
  1. 编译时将所有源文件一同传入编译器,示例g++编译命令:
    g++ gcd.cc gcd.cpp -o gcd_calc

方案2:使用C++17标准库内置gcd

C++17及更高版本的标准库已经内置了gcd实现,无需自己编写函数:

  1. 删掉你自定义的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;
}
  1. 编译时指定C17标准,示例g编译命令:
    g++ gcd.cc -std=c++17 -o gcd_calc

注意事项

  • 如果未写using namespace std;,调用标准库gcd时需要写全std::gcd
  • 低版本编译器可能不支持C++17标准,优先选择方案1兼容性更好

内容的提问来源于stack exchange,提问作者Fresh Programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:54:03