ページ 11

C++でのエラーについて

Posted: 2011年10月13日(木) 17:44
by Whity
勉強のためにC++のコードを書いているのですが、自分の知識では理解できないエラーがコンパイラから出されて困っています。

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

bunsu.cpp

コード:

#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です。

初歩的な質問ですが、ご回答よろしくお願いします。

Re: C++でのエラーについて

Posted: 2011年10月13日(木) 17:56
by bitter_fox
Whity さんが書きました:bunsu.h

コード:

class Bunsu{
private: 

public:	

}// ;が必要
エラー 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
クラス宣言の末尾の;が抜けています。

Re: C++でのエラーについて

Posted: 2011年10月13日(木) 22:06
by box
ヘッダーファイルの中でgcd()の実体を定義しているのは、
やり方としてどうなのかなぁ、などと思ってしまいます。

Re: C++でのエラーについて

Posted: 2011年10月13日(木) 22:27
by Whity
ありがとうございます!それにしても、本当に初歩的すぎなミスですね。
今までいろいろ悩んでいたのがばかばかしくなりました。
とにかく、ありがとうございました。