使用公共函数调用私有函数

Calling a private function using a public funtion

本文关键字:函数 函数调用      更新时间:2023-10-16

在我的作业中,我需要从公共函数(set(int,int))调用私有函数(简化)。当我尝试编译时,我收到一个错误,说重新定义 set .我不确定我做错了什么,或者错误意味着什么。任何帮助都非常感谢。这是我所拥有的:

//Fraction.h
struct Fraction{
    private:
            int numerator;
            int denonminator;
            void simplify();
    public:
            void set(int n, int d){void simplify();};
            void display() const;
};
//Fraction.cpp
#include <iostream>
using namespace std;
#include "Fraction.h"
void Fraction::set(int n, int d){
    numerator = n;
    denonminator = d;
    simplify();
}
void Fraction::simplify(){
    int i;
    for (i = denonminator * numerator;  i > 1; i--){
            if( denonminator % i == 0 && numerator % i == 0){
                    numerator = numerator/i;
                    denonminator = denonminator/i;
                }
        }
}
void Fraction::display () const{
        cout << numerator << " / " << denonminator;
}

Fraction::set实现了两次:您已经在标头中实现了它 - 并在.cpp文件中再次实现它。

您必须决定一个实现。

看看这两种实现的作用,您可能应该将标题更改为读取

//...
void set(int n, int d);
//...

您定义了两次set

struct Fraction{
    void set(int n, int d){void simplify();}; // <== #1
};

和:

void Fraction::set(int n, int d) { // <== #2
    numerator = n;
    denonminator = d;
    simplify();
}

第一个定义无论如何都不会做你想要的 - 它不是调用simplify,而是声明一个名为 simplify 的本地函数,它不接受任何参数并返回void - 这与Fraction::simplify无关。因此,只需将其替换为:

void set(int n, int d);

你定义了两次集合。最好声明一次

struct Fraction{
    private:
            int numerator;
            int denonminator;
            void simplify();
    public:
           // Dont use this-- void set(int n, int d){void simplify();}; //Defined here once
            void set(int n, int d); //Just declare it
            void display() const;
};
//Fraction.cpp
#include <iostream>
using namespace std;
#include "Fraction.h"
void Fraction::set(int n, int d){//Defined it again
    numerator = n;
    denonminator = d;
    simplify();
}
void Fraction::simplify(){
    int i;
    for (i = denonminator * numerator;  i > 1; i--){
            if( denonminator % i == 0 && numerator % i == 0){
                    numerator = numerator/i;
                    denonminator = denonminator/i;
                }
        }
}