0

尝试在 Visual Studio 2010 中编译下面的代码给了我两个关于未解析外部符号的错误。我很确定问题是因为我在一个函数中使用了一个函数,但我不知道具体我做错了什么。代码对我来说看起来不错。

#include <iostream>

using namespace std;

class fraction
{
  public:
    int gcd(int, int);
    void simplifyfraction();
  private:
    int integral, numerator, denominator;
};

int main(){
    return 0;
}

int gcd(int numerator, int denominator)
{
    if (denominator > numerator)
       return gcd(denominator, numerator);
    if (numerator == denominator)
       return numerator;
    if (numerator%denominator == 0)
       return denominator;
    return gcd(numerator, numerator-denominator);
}


void fraction::simplifyfraction()
{
    int mygcd;
    mygcd = gcd(numerator, denominator);
    numerator = numerator/mygcd;
    denominator = denominator/mygcd;
}
4

2 回答 2

5

的定义gcd()不使用类名限定,并被视为独立函数,与类中声明的成员函数不同gcd()fraction

Asgcd()从编译器中调用,fraction::simplifyfraction()搜索一个名为的函数gcd(),它找到的第一个函数声明在与 相同的范围内simplifyfraction(),即fraction::gcd()没有定义(它没有找到完全定义的独立gcd()函数)。链接器随后抱怨它有一个未解析的符号。

更正更改为:

int fraction::gcd(int numerator, int denominator)
{
}

请注意,这也可以通过不gcd()作为成员函数来解决(它不访问 的任何成员变量fraction,所有变量都作为参数传递)或者gcd()in的调用fraction::simplifyfraction()可以更改为:

mygcd = ::gcd(numerator, denominator);
于 2012-12-15T09:15:19.433 回答
1

您的 gcd 实现并没有将自己声明为分数的成员函数。

你需要写:

int fraction::gcd(int numerator, int denominator)
于 2012-12-15T09:15:55.550 回答