1

分数を計算するという目標を達成するために構造体を適切に使用する方法がわかりません (必要です)。率直に言って、私は自分が何をしているのかよくわかりません。これは C++ の 3 番目のクラスにすぎず、途方に暮れています...これが私たちに割り当てられたタスクでした

enter() 関数は、ユーザーからの端数を受け入れます。simple() 関数は、可能であれば、受け取る分数を単純化します。display() 関数は、受け取った分数を表示します。

グローバル関数は Fraction 型を使用します。Fraction 型は、分数の分子と分母を個別のデータ メンバーとして保持します。

これは私のプログラムです。「cin」と「cout 」を除いてメインのみで、GCF関数は教授によって提供されました。他のすべての関数とメイン以外の構造体は自分でやろうとしました...

 #include <iostream>
 using namespace std;

void entry (int a, int b);
void simplify (double c);
void display(int x, int y)

int main() 
{

    struct Fraction fraction;
         cout << "Enter a numerator: " << endl;
         cin >> fraction.num;
         cout << "Enter a denominator: " << endl;
         cin >> fraction.den;

     cout << "Fraction Simplifier" << endl;
     cout << "===================" << endl;

     enter(&fraction);
     simplify(&fraction);
     display(fraction);
 }



        struct Fraction {
                 int num;
                 int den;
                }


        struct Fraction fraction{
                 fraction.num;
                 fraction.den;
                }

        void display(int num, int den) {
                 cout << fraction.num << endl;
                 cout << fraction.den << endl;
                }



// Great Common Factor (Euclid's Algorithm), provided by Professor

int gcf( int num1, int num2 )

{

     int remainder = num2 % num1;
     if ( remainder != 0 )
      {
         return gcf( remainder,num1 );
       }
     return num1;
}

これらは私のエラーです:

w2.cpp: In function 'int main()':   
w2.cpp: 14:  error: aggregate 'Fraction fraction' has incomplete type and cannot be defined 
w2.cpp: 23:  error: 'enter' was not declared in this scope   
w2.cpp: At global scope: w2.cpp:35: error: function definition does not declare parameters  
w2.cpp: In function 'void display(int, int)':   
w2.cpp: 41:  error: 'fraction' was not declared in this scope

本当に長い投稿で申し訳ありませんが、すべての助けをいただければ幸いです。また、自宅や講義中に読むことができる便利な C++ の本を誰かが教えてくれたら (言葉の壁のため、教授を十分に理解できないため)、感謝します。

4

2 に答える 2

3

C++ に関する推奨書籍のリスト。このサイトを検索することも役立ちます。

C++ では、構造体 (またはクラス) と共用体が、ユーザー定義データ構造の 2 つの基本的なタイプを形成します。ユーザー定義のデータ構造は、プログラムで操作したいもののモデル/青写真です (実際の量または抽象的な概念である可能性があります)。したがって、友人の名前を格納する構造が必要な場合は、おそらく次のようにします。

struct FriendName {
    std::string first, last;
}; // the semi-colon is required here

firstそしてlastあなたの構造体のメンバーです。std::stringこれらのメンバーの型で、格納するデータの種類をコンパイラに伝えます。ここでのデータは、ライブラリによって定義された適切な型を使用する文字列です。

a と呼ばれるものを定義したら、FriendNameそれを使用してデータを保存したり、このデータを操作したりできます。ただし、再度定義しようとするFriendNameと、コンパイラは文句を言います。これがあなたのコードで起こっていることです。

FriendNameこのデータ構造を使用するには、オブジェクト (特定のインスタンスを表すメモリ領域) を作成する必要があります。次のようにオブジェクトを作成できます。

FriendName fred; // note that I don't need to use struct FriendName 

次のように使用できます。

fred.first = "Fred"; // write 'fred' object's first name
fred.last = "Flintstone";

.オブジェクト名はマーカーとして機能し、演算子およびメンバー名と組み合わせると、その特定のメンバーの読み取り/書き込みが可能になります。

コンソールから名前を読み込みたいとします: その場合、次のようにします:

FriendName wilma;
std::cin >> wilma.first >> wilma.last; // read in 'wilma' objects members one by one

さあ、あなたが始めるのに十分なものがあります!

于 2012-05-30T03:32:06.427 に答える
3

これらについて説明しましょう。

error: aggregate 'Fraction fraction' has incomplete type and cannot be defined

さて、 でmain()、あなたは と言いstruct Fraction fraction;ました。この時点で、構造体を前方宣言しています。完全ではありませんので、そのまま使用することはできません。

Fractionの前に構造体全体を定義する必要がありますmain()structまた、 instruct Fraction fraction;は不要であり、C から取り残されていることに注意してください。

 error: 'enter' was not declared in this scope

単純。up topを宣言しましentry()たが、 を使用しようとしていますenter()。これ以上言うことはありません。

 At global scope: w2.cpp:35: error: function definition does not declare parameters

これはもう少し紛らわしいです。これは問題のある行です:

struct Fraction fraction{

コンパイラがこれをどのように認識するかは、それが を返す関数であるということですが、Fractionパラメータ リストがありません。このコード ブロックで何をしようとしているのか正確にはわかりません。

error: 'fraction' was not declared in this scope

別の場所で宣言されたオブジェクトを使用しようとしているようです。からのものが必要main()な場合は、それを引数として渡す必要があります。グローバル変数fractionが必要な場合、グローバル空間で必要なのは次のとおりです。

Fraction fraction;

これは、Fraction構造体の後に発生する必要があります。また、これは のオブジェクト名と同じオブジェクト名を持っているため、 のオブジェクトはこれmain()main()シャドウします。グローバル オブジェクトにアクセスする場合は、main()を使用する必要があります::fraction

理解の一部を明確にするのに役立つことを願っています。

私が見る他のいくつかのエラーは次のとおりです。

enter(&fraction);

2 つの sFraction *を受け取る関数に a を渡しています。int私はあなたがこれを取りたいと思うと思いますFraction &. enter (fraction);次に、渡されたオブジェクトを変更するように呼び出すことができます。

simplify(&fraction);

似ていますが、これはdouble. 私はあなたもそれを取りたいと思うと思いますFraction &

  • entry関数と関数が定義されることはありませsimplifyんが、それでもそれらを使用しようとします。
  • displayFractionその一部を印刷するには、 を使用する必要があります。
于 2012-05-30T03:28:37.690 に答える