2012-05-30 92 views
1

我不明白如何正確使用結構來實現我計算分數的目標(這是必需的)。很坦白地說,我對自己在做什麼沒有太多的想法,這只是我在C++中的第三堂課,我感到失落......這是分配給我們的任務需要幫助理解結構和程序的一些錯誤

您輸入()函數接受用戶的一小部分。如果 是可能的,您的 simpl()函數簡化了它接收的分數。你的display()函數顯示它接收的分數。

您的全局函數使用分數類型。分數類型將 分子的分子和分母作爲單獨的數據成員保存。

這是我的計劃,只有主要除「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++書籍,我可以在家中或在講座時閱讀(因爲語言障礙,我無法很好地理解我的教授)也不勝感激

+3

[The Definitive C++ Book Guide and List](http://stackoverflow.com/q/388242/636019) – ildjarn

+0

甜蜜,謝謝你的書目清單! – Umeed

+2

在C++中,您必須先將其他函數放在使用它們的函數之前。在main之前鍵入其他函數。你也可以使用前向聲明,但是在這一點上,只需要寫入函數而不是函數調用函數就可以了。你也錯過了一個;在第6行 – Topo

回答

3

讓我們來看看這些:

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

現在,在main(),你說struct Fraction fraction;。此時,您正在向前聲明您的結構。它不完整,所以你不能像使用它一樣。

您應該在main()之前定義您的整個Fraction結構。還要注意的是,在struct Fraction fraction;struct是不必要的,從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爲了打印它的部分。
+0

哇這和dirkgently使事情更清楚。我已經接近完成它現在大部分的錯誤都消失了,我只需要修復其他功能。嘿,我強調這個哈哈。有一個問題,如果我打印出來,是否可以爲一些同學製作一些副本,以便他們可以使用這些信息,因爲我知道有些人和我在同一條船上。 – Umeed

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 

現在,有足夠的在那裏讓你開始!

+0

很好的解釋。不幸的是,有很多與數據結構無關的錯誤。 – chris

+0

@chris:謝謝!我注意到他們。但是,由於OP對基本C++的不熟悉,我決定儘快進入這些領域。此外,這是作業,我不想爲他犧牲派對:) – dirkgently

+0

是的,但坦率地說,我對自己在做什麼沒有太多的想法促使我去嘗試解釋爲了擺脫不確定性,並知道爲什麼這些都不起作用,以及如何正確使用它們。如果你不知道自己在做什麼並且走上一條最終會變糟的道路,其中一些可能會令人困惑。我認爲儘早解釋這些錯誤有助於從頭開始,而不是在不知道爲什麼它真的起作用的情況下修復代碼(這會在以後造成巨大問題)。 – chris