在我的作业中,我需要从公共函数(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;
}
答案 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;
}
}
}