使用参数从main调用类函数

时间:2016-05-03 04:13:20

标签: c++ function class

我正在尝试将一些变量从我的main函数传递到我已经创建的类中,稍后我会将输入存储在文件中。我希望能够存储多个不同的对象,最多可以存储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];
};

我认为问题出在主函数的最后一行,我试图调用类函数。

2 个答案:

答案 0 :(得分:1)

  • 您不需要void`来调用函数。
  • 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);
}

答案 1 :(得分:0)

您不需要将数组的大小作为storeitem函数中的参数传递。但是,您应该添加一个计数,这由int i表示,作为最后一个参数。

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

添加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];
};