【问题标题】:Library incompatibility? - C++库不兼容? - C++
【发布时间】:2013-02-05 20:17:47
【问题描述】:

我正在尝试解决Project Euler 的第 56 个问题,但在使用Big Integer Library 时遇到了一些麻烦。这是代码:

#include <iostream>
#include "BigInteger.hh"
#include <cmath>
using namespace std;

int digitSum(BigInteger x){
int num[(int)floor(log10(x))+2];
int n = 0;
BigInteger sum = 0;

while (x != 0){
    sum += x - floor(x/10) * 10;
    x = floor(x/10);
    n++;
}

return sum.toInt();
}


int main(int argc, const char * argv[])
{

int max = 0;

for (int i = 1; i <= 100; i++){
    for (int j = 1; j <= 100; j++){
        cout << "i = %i, j = %i ",i,j;
        if (digitSum(pow(i,j)) < max)
            max = digitSum(pow(i,j));

    }

    }

cout << digitSum(pow(2,63));


return 0;
}

问题是,当我尝试构建时,编译器在使用 log10floorpow 函数的行上给出错误,指出它们已使用但未定义。当我评论 #include "BigInteger.hh" 行时,一切正常,但这次我当然不能使用 Big Integer 库。

为什么会出现这样的问题?如何解决?

【问题讨论】:

  • 你必须链接一个库。
  • 原因很简单,Big Integer 库没有为其 BigUnsigned 和 BigInteger 类定义函数 log10floorpow。要么自己编写,要么使用其他库。
  • 嗯,好吧,我明白这一点,但仍然没有理由说这些函数是未定义的。我应该能够将它们与 C++ 整数一起使用。
  • 您在 digitSum 函数中使用 BigInteger 参数调用 log10floor。那显然行不通……

标签: c++ function shared-libraries static-libraries


【解决方案1】:

是编译器问题还是链接器问题?如果是后者,请尝试将 -lm 添加到命令行以链接数学库。假设这里是 GNU gcc。

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2023-04-06
    相关资源
    最近更新 更多