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

时间:2015-01-31 21:19:06

标签: c++

在我的作业中,我需要从公共函数(set(int,int))调用私有函数(简化)。当我尝试编译时,我得到一个错误,表示重新定义集合。我不确定我做错了什么,或错误意味着什么。很感谢任何形式的帮助。这就是我所拥有的:

//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;
}

3 个答案:

答案 0 :(得分:2)

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

你必须决定一个实现。

看看两个实现的作用,您应该将标题更改为

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

答案 1 :(得分:2)

您定义了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);

答案 2 :(得分:1)

您定义了两次设置..更好地声明一次

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;
                }
        }
}