尝试在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;
}
Run Code Online (Sandbox Code Playgroud)
定义gcd()
不受类名限定,并被视为独立函数,与类中声明的成员函数不同.gcd()
fraction
正如gcd()
从fraction::simplifyfraction()
编译器调用的那样,搜索一个名为的函数gcd()
,它找到的第一个函数在同一范围内声明simplifyfraction()
,即fraction::gcd()
没有定义(它没有找到完全定义的独立gcd()
函数).链接器随后抱怨它有一个未解析的符号.
要更改为:
int fraction::gcd(int numerator, int denominator)
{
}
Run Code Online (Sandbox Code Playgroud)
请注意,这也可以通过不gcd()
作为成员函数(它不访问任何成员变量fraction
,所有变量作为参数传递)或gcd()
in 的调用fraction::simplifyfraction()
可以更改为:
mygcd = ::gcd(numerator, denominator);
Run Code Online (Sandbox Code Playgroud)