C++ C++;链接器对函数的未定义引用找不到我的错误
这是一个家庭作业问题。它编译得很好,但链接器在我的第一个for循环之后给出了对函数getSalesData的未定义引用——第20行。这是代码。我找不到哪里做错了什么;我定义了我的原型,它与我的函数头匹配,我只是简单地调用函数C++ C++;链接器对函数的未定义引用找不到我的错误,c++,linker,undefined-reference,C++,Linker,Undefined Reference,这是一个家庭作业问题。它编译得很好,但链接器在我的第一个for循环之后给出了对函数getSalesData的未定义引用——第20行。这是代码。我找不到哪里做错了什么;我定义了我的原型,它与我的函数头匹配,我只是简单地调用函数 // chips and salsa #include <iostream> #include <iomanip> #include <string> int getJarsSold(std::string type); void ge
// chips and salsa
#include <iostream>
#include <iomanip>
#include <string>
int getJarsSold(std::string type);
void getSalesData(int jarsSold[],int size,int &totalJars,int &highSeller,int &lowSeller);
int main() {
const int SIZE = 5;
const std::string salsaTypes[] {"Mild","Medium","Sweet","Hot","Zesty"};
int jarsSold[SIZE] = {};
int highIndex,lowIndex,totalJarsSold;
for (int i = 0; i < SIZE; i++) {
jarsSold[i] = getJarsSold(salsaTypes[i]);
}
getSalesData(jarsSold,SIZE,totalJarsSold,highIndex,lowIndex);
std::cout << " Type Jars Sold\n";
std::cout << "---------------------\n";
for (int i = 0; i < SIZE; i++) {
std::cout << std::setw(8) << salsaTypes[i] << std::setw(15) << jarsSold[i] << std::endl;
}
std::cout << "*********************\n";
std::cout << "Total Sales = " << totalJarsSold << std::endl;
std::cout << "Highest Seller = " << salsaTypes[highIndex] << std::endl;
std::cout << "Lowest Seller = " << salsaTypes[lowIndex] << std::endl;
}
int getJarsSold(std::string type) {
bool validData = false;
int numJars;
while (!validData) {
std::cout << "Enter jars sold this month for " << type << " salsa type: ";
std::cin >> numJars;
if (numJars < 0) {
std::cout << "Number of jars sold must be 0 or positive number.\n";
}
else {
validData = true;
}
}
validData = false;
return numJars;
}
void getSalesData(int jarsSold[],int size,int totalJars,int highIndex,int lowIndex) {
bool firstRun = true;
int highVal,lowVal;
totalJars = 0;
for (int i = 0; i < size; i++) {
if (firstRun) {
highIndex = i;
highVal = jarsSold[highIndex];
lowIndex = i;
lowVal = jarsSold[lowIndex];
totalJars += jarsSold[i];
firstRun = false;
}
else {
totalJars += jarsSold[i];
if (jarsSold[i] > highVal) {
highVal = jarsSold[i];
highIndex = i;
}
if (jarsSold[i] < lowVal) {
lowVal = jarsSold[i];
lowIndex = i;
}
}
}
}
//薯片和萨尔萨
#包括
#包括
#包括
int getJarsSold(std::string类型);
作废getSalesData(int-jarsSold[],int-size,int&totalJars,int&highSeller,int&lowSeller);
int main(){
常数int SIZE=5;
const std::字符串salsaTypes[]{“温和”、“中等”、“甜蜜”、“热”、“活泼”};
int-jarsSold[SIZE]={};
int高索引、低索引、totalJarsSold;
对于(int i=0;i std::cout/usr/bin/ld:chips_and_salsa.o:in functionmain::chips_and_salsa.cpp:(.text+0x225):对
getSalesData(int*,int,int&,int&,int&),int&)collect2的未定义引用:错误:ld返回1退出状态开头的声明签名与定义中的签名不匹配(int&totalJars
vsint-totalJars
等等),因此它们被视为不同的函数。好的。因此引用符号也必须放在标题中。谢谢,我完全忽略了这一点。@WilliamS是的。函数声明和定义必须完全匹配,包括引用符号。否则链接器将抱怨未定义的引用错误。请注意, int 和<代码> INT/<代码>是不同的;前者被称为“in”参数,后者是“IN/OUT”参数。只有当函数应该修改传入的变量时,才应该使用它。IN/OUT参数有时被认为是坏的风格。