我不知道如何正确使用结构来实现我计算分数的目标(这是必需的)。坦率地说,我对我正在做的事情没有多少想法,这只是我在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 ++书籍(因为语言障碍我无法理解我的教授)也会受到赞赏
答案 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 &
。
entry
和simplify
函数永远不会定义,但您仍尝试使用它们。display
应该使用Fraction
来打印部分内容。答案 1 :(得分:3)
A list of recommended books on C++.搜索此网站也有帮助。
在C ++中,结构(或类)和联合形成了两种基本类型的用户定义数据结构。用户定义的数据结构是您希望程序使用的某些东西的模型/蓝图(可能是真实世界的数量或抽象概念)。所以,如果你想要一个结构来存储你朋友的名字,你可能会做这样的事情:
struct FriendName {
std::string first, last;
}; // the semi-colon is required here
first
和last
是您的结构的成员。 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
现在,有足够的东西让你入门!