c++ - 调用带有编译错误的 C++ 方法

标签 c++ compilation

对于以下程序,当我尝试编译它时遇到大量编译错误。我认为他们与方法调用有关。我不熟悉 C++,也不知道是什么原因造成的。谁能帮忙?这是源代码:

#include <iostream>
using namespace std;
//getting the greatest common divisor to help reduce fractions
int GDC(int x, int y)
{
    int t;
     while (y!=0)
    {
        t=y;
        y=x%y;
        x=t;
    }
    return x;
}

//constructing a RationalNumber wit a numerator and a denominator as seperate elements.
//it also reduces the fraction as well as show them.
//prevents 0 in the denominator as well as avoid negative denominators
class RationalNumber
{
    public:
        RationalNumber(int num=0, int denom=0)
        {
            numerator=num;
            denominator=denom;
        }
        void show()
        {
            {
                cout << "(" << numerator <<"/";
                cout << denominator << ")";
            }
        }
        void reduce()
        {
            int reduction;
            reduction= GCD(numerator, denominator);
            numerator=numerator/reduction;
            denominator=denominator/reduction;

            if(denominator == 0)
            {
                cout << "Cannot compute with 0 denominator ";
            }
            if(denominator < 0)
            {
                cout << "Cannot compute negative demoninators ";
            }
            else
            {
                //simplifies fraction to a whole number when denominator is 1
                if(denominator == 1)
                {
                    cout << "(" << numerator <<")";
                }
                else
                {
                    cout << "(" << numerator <<"/";
                    cout << denominator << ")";
                }
            }
        }
        RationalNumber operator+(RationalNumber op2);
        RationalNumber operator-(RationalNumber op2);
        RationalNumber operator*(RationalNumber op2);
        RationalNumber operator/(RationalNumber op2);
        RationalNumber operator++();

    private:
        double numerator, denominator;
};

void Accept(int n)
{
    if(n<0)
    {
       cout << "Cannot have negatice denominators: ";
    }
    else if (n == 0)
        cout << "Cannot have zero in the denominator: ";
}

//Division
RationalNumber RationalNumer::operator/(RationalNumber op2)
{
    RationalNumber temp;
    int reduction;
    temp.numerator=(numerator*op2.denominator);
    temp.denominator=denominator*op2.numerator;
    cout << "Division:       ";
    return temp;
}

//Subtraction
RationalNumber RationalNumer::operator-(RationalNumber op2)
{
    RationalNumber temp;
    int reduction;
    temp.numerator=(numerator*op2.denominator)-(op2.numerator*denominator);
    temp.denominator=op2.denominator* denominator;
    cout << "Subtraction:       ";
    return temp;
}

//Multiplication
RationalNumber RationalNumer::operator*(RationalNumber op2)
{
    RationalNumber temp;
    temp.numerator=(op2.numerator*numerator);
    temp.denominator=op2.denominator* denominator;
    cout << "Multiplication:       ";
    return temp;
}

//Addition
RationalNumber RationalNumer::operator+(RationalNumber op2)
{
    RationalNumber temp;
    temp.numerator=(op2.numerator*denominator) + ((numerator)*(op2.denominator));
    temp.denominator=op2.denominator* denominator;
    cout << "Addition:       ";
    return temp;
}

RationalNumber RationalNumer::operator++()
{
    numerator++;
    denominator++;
    return *this;
}


void getFraction(int &x, int &y, int &z, int &t)
{
    cout << "First Fraction: ";
    cout << "\n";
    cout << "numerator: ";
    cin >> x;

    do
    {
        cout << "denominator: ";
        cin >> y;
        Accept(y);
        cout << "\n";
        cout << endl;
    }
    while(y <=0);

    cout << "Second Fraction: ";
    cout << "\n";
    cout << "numerator: ";
    cin >> z;
    do
    {
        cout << "denominator: ";
        cin >> t;
        Accept(t);
        cout << "\n";
        cout << endl;
    }
    while(t <=0);
}

void aftermath(int &x, int &y, int &z, int &t)
{
    RationalNumber obA, obS, obM, obD, ob2(x,y), ob3(z,t);
    char Math;
    cout << "Enter sign (+,-,*,/):  ";
    cin >> Math;
    if(Math == '+')
    {
        obA=ob2+ob3;
        obA.reduce();
        cout << "\n";
    }
    else if(Math == '-')
    {
        obS=ob2-ob3;
        obS.reduce();
        cout << "\n\n";
    }
    else if(Math == '*')
    {
        obM=ob2*ob3;
        obM.reduce();
        cout << "\n\n";
    }
    else if(Math == '/')
    {
        obD=ob2/ob3;
        obD.reduce();
        cout << "\n\n";
    }
    else
        cout << "Invalid sign";
}

int main()
{
    char answer;
    do
    {
        int x,y,z,t = 0;
        getFraction(x,y,z,t);
        RationalNumber obA, obS, obM, obD, ob2(x,y), ob3(z,t);

        ob2.show();
        cout <<" ";
        ob3.show();
        cout << "\n\n";
        aftermath(x,y,z,t);
        cout << "\n\n";
        cout << "Create another fraction? - y or n? ";
        cin >> answer;
        cout << "\n";
    }
    while((answer == 'y'));

    if((answer != 'y'))
    {
        cout << "GOOD-BYE ";
    }
    return 0;
}

这里是编译错误:

g++ -o Math math.cpp
math.cpp: In member function 'void RationalNumber::reduce()':
math.cpp:37: error: 'GCD' was not declared in this scope
math.cpp: In function 'void getFraction(int&, int&, int&, int&)':
math.cpp:136: error: invalid operands of types '<unresolved overloaded function type>' and 'const char [2]' to binary 'operator<<'
math.cpp:151: error: invalid operands of types '<unresolved overloaded function type>' and 'const char [2]' to binary 'operator<<'

最佳答案

(注意:自从我发布答案后,Kyle 更新了输出,因此其中一些缺少正确的上下文。)

第一个错误:您正在调用“GCD”,但您的函数名为“GDC”。

第二个错误:“RationalNumer”不是“RationalNumber”。

当您在所有出现的地方修复第二个错误时,大多数或所有其他错误都会消失(其中有五个 - 搜索“RationalNumer”)。

更新输出中的新错误 - 另一个错字:count << "\n";应该是 cout << "\n"; .

两条一般性建议:

  • 阅读错误信息。 8-) 它们通常看起来是难以理解的行话,或者只是在撒谎,但通常答案就在其中。

  • 永远只担心第一个错误。通常情况下,解决这个问题会使其他部分或全部消失。

关于c++ - 调用带有编译错误的 C++ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/817833/

相关文章:

java - Java编译中错误的意外顺序

C:编译器可以识别哪些变量?

java - 编辑.java文件并重新编译

c# - Thrift 如何处理 Zlib 刷新标记被分割成多个消息?

compilation - 为 Ada 构建共享库

c++ - std::unordered_set迭代器遍历的复杂度

C++ 无限循环瓶颈?

c++ - 如何在 Linux 上使用 Boost.Filesystem?

c++ - 你如何将一个类的函数作为参数传递给同一个类的另一个函数

c++ - 图可排序性 C++