C++:数组作为函数形式参数让我出错

C++: Array as Function Formal Parameter Gets me Errors

我在大学学习计算机科学 class。我正在做一项不会很快到期的作业,但我 运行 遇到了一个问题,我厌倦了等待老师回复我的电子邮件。我们用 Visual Studio 2015 年学习了 C++ 编码,并学习了用户定义的函数、数组和结构。我们没有对 classes 或任何东西做任何事情,我发现的关于我遇到的错误的所有信息似乎都涉及这些,因此对我没有帮助。

每当我 运行 我的程序时,我都会收到以下错误:

"LNK2019 unresolved external symbol "void __cdecl takeOrder(int,int,struct menuItemType * const)" (?takeOrder@@YAXHHQAUmenuItemType@@@Z) 在函数 _main

中引用

LNK1120 1 个未解决的外部问题

据说这两个错误都在 "line 1"。

Visual Studio网站上的文档词汇量有点大,我没有完全理解那里的所有信息,但我认为这与我的变量声明有关。这是唯一有意义的事情。

我对数组不是很了解,但我认为我使用它们是正确的。我已经对教科书、笔记和拼写进行了两次、三次、四次检查,但我不知道自己遗漏了什么。下面是完整的代码(保存一些 // 只会让它更长的东西)。

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <cstring>

using namespace std;

struct menuItemType
{
    string itemName;
    double itemPrice;
};

void read(menuItemType menuList[], int&);
void showMenu(menuItemType menuList[], int&);
void takeOrder(int, int, menuItemType menulist[]);

int main()
{
    int counter = 0;
    menuItemType menuList[10];
    int order[10] = { 0,0,0,0,0,0,0,0,0,0 };
    double totalBill = 0;
    double tax = 0;

    cout << fixed << setprecision(2) << showpoint;
    cout << "Welcome to Hold-ye-Overs, a delightful place to eat with food\nmade from one hundred percent actual food!\n";

    read(menuList, counter);
    showMenu(menuList, counter);
    takeOrder(order[10], counter, menuList);

    return 0;
}

void takeOrder(int order[], int counter, menuItemType menuList[])
{
    int amount_of_item;
    int choice;
    bool flag = true;
    char orderMore;

    while (flag == true)
    {
        cout << "Please enter the number for the item you would like to have." << endl;
        cin >> choice;
        cout << "Please enter the number of " << menuList[choice - 1].itemName << "s you would like to order." << endl;
        cin >> amount_of_item;
        order[choice - 1] = order[choice - 1] + amount_of_item;
        cout << "Would you like to order more items? y/n" << endl;
        cin >> orderMore;
        if (orderMore == 'y' || orderMore == 'Y')
            flag = true;
        else
            flag = false;
    }

}
void read(menuItemType menuList[], int& counter)
{
    ifstream in;
    in.open("menu.txt");
    char temp = char();
    int i = 0;

    while (!in.eof())
    {
        getline(in, menuList[i].itemName);
        in >> menuList[i].itemPrice;
        //cout << menuList[i].itemName << " " << menuList[i].itemPrice << endl;
        in.get(temp);//to pick up endl after the price
        ++i;
        counter++;
    }
    in.close();
}

void showMenu(menuItemType menuList[], int& counter)
{
    cout << fixed << setprecision(2) << showpoint;
    int i = 0;
    for (i = 0; i < counter; i++)
    { cout << left << setw(2) << i + 1 << " :" << left << setw(20) << menuList[i].itemName;
    cout << right << setw(1) << "$" << left << setw(7) << menuList[i].itemPrice << endl;
    }

}

如果您想将数组传递给函数 takeOrder,我可以看到您需要更正两个地方。

  1. 函数的定义采用数组,因此声明需要更改为 void takeOrder(int[], int, menuItemType menulist[]);
  2. 将 main 函数中的用法更改为 takeOrder(order, counter, menuList);,因为您的函数正在接受数组而不是 int(order[10] 传递整数)

如果要将函数的整数更改定义传递给 takeOrder(int order, int counter, menuItemType menuList[])