需要帮助理解struct,以及程序中的一些错误

时间:2012-05-30 03:16:50

标签: c++ struct fractions

我不知道如何正确使用结构来实现我计算分数的目标(这是必需的)。坦率地说,我对我正在做的事情没有多少想法,这只是我在C ++中的第三课,我感到迷茫...这是分配给我们的任务

  

您的enter()函数接受来自用户的分数。您的   如果,简化()函数简化了它接收的分数   可能。你的display()函数显示它的分数   收到。

     

您的全局函数使用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 ++书籍(因为语言障碍我无法理解我的教授)也会受到赞赏

2 个答案:

答案 0 :(得分:3)

让我们来看看这些:

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

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

您应该在Fraction之前定义整个main()结构。另请注意,struct中的struct 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{

编译器如何看待它是一个返回Fraction的函数,但它缺少参数列表。我不确定你要对这段代码做什么。

error: 'fraction' was not declared in this scope

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

Fraction fraction;

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

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

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

enter(&fraction);

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

simplify(&fraction);

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

  • 您的entrysimplify函数永远不会定义,但您仍尝试使用它们。
  • display应该使用Fraction来打印部分内容。

答案 1 :(得分:3)

A list of recommended books on C++.搜索此网站也有帮助。

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

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

firstlast是您的结构的成员。 std::string是这些成员的类型,它告诉编译器要存储什么类型的数据 - 这里的数据是字符串,我们使用库定义的适当类型。

一旦定义了名为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

现在,有足够的东西让你入门!