2016-05-03 87 views
1

我想從我的主要功能,通過一些變數,到我已經做出了類將在後面讓我保存輸入客棧的文件。我希望能夠有存儲多個不同的對象時,達到約20調用從主類函數參數

int main(){ 

int a[20]; 
float b[20]; 
string c[20]; 
string d[20]; 
string name[20]; 
char contin; 
menu MyMenu; 

for(int i = 0; i < 20; i++){ 
    cout << "Please enter the name of the item: "; 
    cin >> name[i]; 
    cout << "\nPlease enter a value: "; 
    cin >> a[i]; 
    cout << "\nPlease enter a value: "; 
    cin >> b[i]; 
    cout << "\nPlease enter a phrase: "; 
    cin >> c[i]; 
    cout << "\nPlease enter a a phrase: "; 
    cin >> d[i]; 
    cout << "\n\nWould you like to go through the list again?(y/n): "; 
    cin >> contin; 
    cout << "\n"; 
    if(contin == 'N' || 'n'){ 
     break; 
    }; 
}; 
void MyMenu.storeitem(a[20], b[20], c[20], d[20]);`};` 

這是目前具有環路我的主要功能,然後輸入存儲到一個數組。

是遇到問題,我該生產線是在那裏我試圖給它的所有傳遞給類函數最後一行。

下面是類

class menu{ 
    public: 
    void storeitem(int a[20], float b[20], string c[20], string d[20]); 
}; 
void menu::storeitem(int a[20], float b[20], string c[20], string d[20]){ 

    int storeb[20]; 
    int storea[20]; 
    string storec[20]; 
    string stored[20]; 

    storeb[20] = b[20]; 
    storea[20] = a[20]; 
    storec[20] = c[20]; 
    stored[20] = d[20]; 
}; 

我認爲這個問題是在我試圖調用類函數main函數的最後一行。

+1

'storeb [20] = b [20];'等正在訪問越界。不要點那個! – MikeCAT

+1

閱讀20個元素數組中的30個項目?另一個超出界限的訪問! – MikeCAT

+0

我的壞,我只希望它讀取多達20個,生病編輯 – Thecube

回答

1
  • 您將不需要0​​或`來調用函數。
  • storeb[20] = b[20];這樣的事情不是如何複製數組,但廢話與超出範圍的訪問。
  • 不要執行超出範圍的訪問並匹配期望的參數類型和傳遞的內容。
  • 使用神奇數字並不好,因爲它會導致錯字或忘記改變某些值的風險。

試試這個:

#include <iostream> 
#include <string> 

using std::cin; 
using std::cout; 
using std::string; 

const int MAX = 20; 

class menu{ 
    public: 
    void storeitem(int a[MAX], float b[MAX], string c[MAX], string d[MAX]); 
}; 
void menu::storeitem(int a[MAX], float b[MAX], string c[MAX], string d[MAX]){ 

    int storeb[MAX]; 
    int storea[MAX]; 
    string storec[MAX]; 
    string stored[MAX]; 

    for(int i = 0; i < MAX; i++){ 
     storeb[i] = b[i]; 
     storea[i] = a[i]; 
     storec[i] = c[i]; 
     stored[i] = d[i]; 
    } 

    // do something with what is stored 
} 

int main(){ 

    int a[MAX] = {0}; 
    float b[MAX] = {0}; 
    string c[MAX]; 
    string d[MAX]; 
    string name[MAX]; 
    char contin; 
    menu MyMenu; 

    for(int i = 0; i < MAX; i++){ 
     cout << "Please enter the name of the item: "; 
     cin >> name[i]; 
     cout << "\nPlease enter a value: "; 
     cin >> a[i]; 
     cout << "\nPlease enter a value: "; 
     cin >> b[i]; 
     cout << "\nPlease enter a phrase: "; 
     cin >> c[i]; 
     cout << "\nPlease enter a a phrase: "; 
     cin >> d[i]; 
     cout << "\n\nWould you like to go through the list again?(y/n): "; 
     cin >> contin; 
     cout << "\n"; 
     if(contin == 'N' || 'n'){ 
      break; 
     } 
    } 
    MyMenu.storeitem(a, b, c, d); 
} 
+0

'如果(CONTIN ==「N」 ||「N」)'是一個錯誤 –

0

你並不需要將數組的大小通作爲storeitem功能參數。但是你應該添加一個計數,這是由int i表示的,作爲最後一個參數。

void menu::storeitem(int a[], float b[], string c[], string d[], int i){ 

添加i ++;到循環底部的內部,這將保持他們經歷了多少次完整的時間並輸入了數據。當你調用你的函數時,你現在也必須傳遞我作爲參數。

cin >> contin; 
    i++; 
    if((contin == 'n') || contin == 'N'){ 
      break; 
    } 
} 
MyMenu.storeitem(a, b, c, d, i); 

你在這裏試着完成什麼? 您是否試圖將存儲在數組b中的內容存儲到storeb中? 所有這些陳述都是說讓stroreb,storea等中的第20個元素等於我們傳遞給函數的參數的第20個元素。一些更多的信息將不勝感激。

storeb[20] = b[20]; 
storea[20] = a[20]; 
storec[20] = c[20]; 
stored[20] = d[20]; 
}; 
+0

感謝您的第一部分,不知道我沒有指定大小。 – Thecube

+0

至於第二位,我意識到現在是錯誤的,我現在有一個循環,它的目的是基本上使array1 = array2,所以然後我可以使用該數組來保存和編輯輸入文本文件 – Thecube

+0

所以你幾乎試圖將數組b中的所有內容放入storeb中?爲什麼不把數組b的所有內容放入文本文件? @Thecube – Beez