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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Whity
記事: 4
登録日時: 13年前
住所: 京都

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

#1

投稿記事 by Whity » 13年前

勉強のために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です。

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

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

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

#2

投稿記事 by bitter_fox » 13年前

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

box
記事: 2002
登録日時: 14年前

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

#3

投稿記事 by box » 13年前

ヘッダーファイルの中でgcd()の実体を定義しているのは、
やり方としてどうなのかなぁ、などと思ってしまいます。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Whity
記事: 4
登録日時: 13年前
住所: 京都

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

#4

投稿記事 by Whity » 13年前

ありがとうございます!それにしても、本当に初歩的すぎなミスですね。
今までいろいろ悩んでいたのがばかばかしくなりました。
とにかく、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る