This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center。
7年前关闭。
尝试在Visual Studio 2010中编译下面的代码给我两个有关未解析的外部符号的错误。我很确定问题是因为我在函数中使用了函数,但是我不知道我在做什么错。该代码对我来说还不错。
只是要注意,也可以通过不使用
7年前关闭。
尝试在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;
}
最佳答案
gcd()
的定义不符合类名,并且被视为独立函数,与gcd()
类中声明的成员函数fraction
不同。
从gcd()
调用fraction::simplifyfraction()
时,编译器会搜索名为gcd()
的函数,并且找到的第一个函数在与simplifyfraction()
相同的作用域中声明,即fraction::gcd()
没有定义(它找不到完全定义的独立gcd()
函数)。链接器随后抱怨它有一个未解析的符号。
将更改更正为:
int fraction::gcd(int numerator, int denominator)
{
}
只是要注意,也可以通过不使用
gcd()
作为成员函数(它不访问fraction
的任何成员变量,所有变量作为参数传递)或在gcd()
中调用fraction::simplifyfraction()
来解决此问题。可以更改为:mygcd = ::gcd(numerator, denominator);