1

我不知道如何正确使用结构来实现计算分数的目标(这是必需的)。坦率地说,我不知道自己在做什么,这只是我在 C++ 中的第三堂课,我感到迷茫……这是分配给我们的任务

您的 enter() 函数接受来自用户的一小部分。如果可能,您的简化()函数会简化它收到的分数。您的 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

让我们来看看这些:

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

现在,在main(),你说struct Fraction fraction;。此时,您正在前向声明您的结构。它不完整,因此您不能像以前那样使用它。

你应该在Fraction之前定义你的整个结构main()。另请注意,structinstruct Fraction fraction;是不必要的,是从 C 中遗留下来的。

 error: 'enter' was not declared in this scope

简单的。您已声明entry()最高,但您正在尝试使用enter(). 不多说了。

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

现在这有点令人困惑。这是违规行:

struct Fraction fraction{

编译器如何看待这是一个返回 a 的函数Fraction,但它缺少其参数列表。我不确定您要使用此代码块做什么。

error: 'fraction' was not declared in this scope

看起来您正在尝试使用在其他地方声明的对象。如果你想要一个 from main(),你必须将它作为参数传递。如果你想要一个全局变量fraction,你在全局空间中只需要:

Fraction fraction;

这应该发生在Fraction结构之后。另请注意,由于 this 与 in 中的对象名称相同main(),因此main()阴影中的对象会隐藏此对象,如果您想从中访问全局对象,则main()需要使用::fraction.

我希望这有助于澄清一些理解。

我看到的其他一些错误是:

enter(&fraction);

您将 a 传递Fraction *给需要两个ints 的函数。我想你会希望这个拿一个Fraction &。然后你可以像enter (fraction);让它修改传入的对象一样调用它。

simplify(&fraction);

类似,但这个需要一个double. 我想你也会想要它Fraction &

  • 你的entrysimplify函数永远不会被定义,但你仍然尝试使用它们。
  • display应该采取 aFraction以便打印它的部分。
于 2012-05-30T03:28:37.690 回答
3

推荐的 C++ 书籍列表。搜索这个网站也有帮助。

在 C++ 中,结构(或类)和联合构成了用户定义数据结构的两种基本类型。用户定义的数据结构是您希望程序使用的某些东西的模型/蓝图(它可以是真实世界的数量或抽象概念)。所以,如果你想要一个结构来存储你朋友的名字,你可能会做这样的事情:

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 回答