僕はC++で分数を扱うためにクラスを定義してmain関数で利用するプログラムを作ったのですが、よくわからないエラーが出てコンパイルできません。
抽象的な説明をするよりコードを見てもらったほうが早いと思うので、以下にソースを示します。
bunsu.h
#include<string>
#include<sstream>
using namespace std;
int gcd(int x, int y){
int r;
if(x == 0 || y == 0){ // 引数チェック
return 0;
}
// ユーグリッドの互除法
while((r = x % y) != 0) { // yで割り切れるまでループ
x = y;
y = r;
}
return y;
}
class Bunsu{
private:
int bunbo,bunshi;
void yakubun(){
int num=gcd(bunshi,bunbo);
if( num != 1 ){//互いに素でないなら
bunshi/=num , bunbo/=num;
}
}
string IntToString(int number){
stringstream ss;
ss << number;
return ss.str();
}
public:
Bunsu(int a,int b){
bunshi=a;
bunbo=b;
yakubun();
}
string tostr(){
string str;
str=IntToString(bunshi);
str+="/";
str+=IntToString(bunbo);
return str;
}
void assign(int over,int under){
bunshi=over;
bunbo=under;
}
Bunsu& operator+ (const Bunsu &obj){
bunbo= obj.bunbo * bunbo;
bunshi= bunshi*obj.bunbo + obj.bunshi*bunbo ;
yakubun();
return *this;
}
Bunsu& operator= (const Bunsu &obj){
bunbo= obj.bunbo;
bunshi= obj.bunshi;
return *this;
}
Bunsu& operator+= (const Bunsu &obj){
bunbo+= obj.bunbo * bunbo;
bunshi+= bunshi*obj.bunbo + obj.bunshi*bunbo ;
yakubun();
return *this;
}
}
#include <iostream>
#include "bunsu.h"
int main(){
Bunsu b1(1,3);
Bunsu b2(16,6);
Bunsu b3(1,1);
cout << b2.tostr() << endl; // 8/3
b3= b1+b2;
cout<< b3.tostr() << endl;//3/1
b3= b3+b1+b2;
cout<< b3.tostr() << endl;//6/1
b3+=b1 ;
cout<<b3.tostr()<<endl;//19/3
b1=b2;
cout <<b1.tostr() << endl;//8/3
return 0;
}
エラー E2176 C:\c_programs\bunsu\bunsu.cpp 4: 宣言に型が多すぎる
エラー E2111 C:\c_programs\bunsu\bunsu.cpp 4: ここでは型 'Bunsu' は定義できない
エラー E2034 C:\c_programs\bunsu\bunsu.cpp 23: 'int' 型は 'Bunsu' 型に変換できない(関数 main() )
*** 3 errors in Compile ***
** error 1 ** deleting Debug\bunsu.obj
といったようなエラーが出ます。
4行目でBunsuを定義しているつもりはないんですけど、エラーが出ます。
使用コンパイラはBCC 5.5.1です。
初歩的な質問ですが、ご回答よろしくお願いします。