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++:数组作为函数形式参数让我出错的主要内容,如果未能解决你的问题,请参考以下文章