C++ C++;链接器对函数的未定义引用找不到我的错误

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

这是一个家庭作业问题。它编译得很好,但链接器在我的第一个for循环之后给出了对函数getSalesData的未定义引用——第20行。这是代码。我找不到哪里做错了什么;我定义了我的原型,它与我的函数头匹配,我只是简单地调用函数

// 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;istd::cout/usr/bin/ld:chips_and_salsa.o:in function
main::chips_and_salsa.cpp:(.text+0x225):对
getSalesData(int*,int,int&,int&,int&),int&)collect2的未定义引用:错误:ld返回1退出状态开头的声明签名与定义中的签名不匹配(
int&totalJars
vs
int-totalJars
等等),因此它们被视为不同的函数。好的。因此引用符号也必须放在标题中。谢谢,我完全忽略了这一点。@WilliamS是的。函数声明和定义必须完全匹配,包括引用符号。否则链接器将抱怨未定义的引用错误。请注意, int 和<代码> INT/<代码>是不同的;前者被称为“in”参数,后者是“IN/OUT”参数。只有当函数应该修改传入的变量时,才应该使用它。IN/OUT参数有时被认为是坏的风格。