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

Posted

技术标签:

【中文标题】C++:数组作为函数形式参数让我出错【英文标题】:C++: Array as Function Formal Parameter Gets me Errors 【发布时间】:2016-12-04 03:14:39 【问题描述】:

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

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

“函数_main中引用的LNK2019未解析的外部符号“void __cdecl takeOrder(int,int,struct menuItemType * const)”(?takeOrder@@YAXHHQAUmenuItemType@@@Z)

LNK1120 1 个未解决的外部问题"

这两个错误都在“第 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;
    


【问题讨论】:

What is an undefined reference/unresolved external symbol error and how do I fix it?的可能重复 看看你的takeOrder的原型和takeOrder的实现。看到参数的不同了吗? takeOrder的声明和定义不匹配。 除了相互递归的函数外,不要使用前向声明。将main 函数放在最后。问题已解决。 [出于好奇:你是从哪里了解到这种“打我-请-哦-请-打-我”的编码风格的?如果是书,烧掉它。] 您的前向声明与您的实现的参数列表不匹配 【参考方案1】:

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

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

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

【讨论】:

谢谢!那成功了。我想我不明白如何正确格式化参数,以便它们正常工作。再次感谢!

以上是关于C++:数组作为函数形式参数让我出错的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中将数组作为函数参数传递

C++数组作为函数参数的几个问题(转)

6-17——调用数组作为参数的函数时,容易出错的点

6-17——调用数组作为参数的函数时,容易出错的点

6-17——调用数组作为参数的函数时,容易出错的点

在 C++ 中将不同大小的常量数组作为函数参数传递