将结构数组传递给抛出未定义参考的函数的问题c ++

时间:2018-11-06 02:31:46

标签: c++ arrays oop struct

在将结构数组传递给搜索结构的函数时遇到问题。我在main外部delcare了一个结构体数组,然后将其复制到main内部的新结构体数组(因此我可以在main内部访问它们,并且可以更轻松地传递它们)。不知道为什么它会失败。谁能帮我吗?

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <algorithm>
using namespace std;

const int MAX = 2000000;
const string DFile = "DFile.dms";
const string EFile = "EFile.dms";
const string VFile = "VFile.dms";

struct dogs
{
  int did;
  int age;
} DFBuffer[MAX];

struct examine
{
  int vid;
  int did;
  int fee;
} EFBuffer[MAX];

struct vet
{
  int vid;
  int eLevel;
} VFBuffer[MAX];

void readDF(ifstream&);
void readEF(ifstream&);
void readVF(ifstream&);
int getLineCount(ifstream&);
bool dogCompare(dogs lhs, dogs rhs) {return lhs.did < rhs.did;}
bool vetCompare(vet lhs, vet rhs) {return lhs.vid < rhs.vid;}
bool examCompare(examine lhs, examine rhs) {return lhs.vid < rhs.vid;}
void vetExamSeach(struct vet newVetArray[], struct examine newExamArray[], 
int, int);

int main()
{
  dogs * newDogArray = new dogs[MAX];
  examine * newExamArray = new examine[MAX];
  vet * newVetArray = new vet[MAX];

  ifstream DF, EF, VF;
  int dogCount = 0, examCount = 0, vetCount = 0;

  DF.open(DFile);
  readDF(DF);
  EF.open(EFile);
  readEF(EF);
  VF.open(VFile);
  readVF(VF);

  DF.open(DFile);
  dogCount = getLineCount(DF);
  EF.open(EFile);
  examCount = getLineCount(EF);
  VF.open(VFile);
  vetCount = getLineCount(VF);


  for(int i = 0; i < dogCount; i++)
    newDogArray[i] = DFBuffer[i];
  for(int i = 0; i < vetCount; i++)
    newVetArray[i] = VFBuffer[i];
  for(int i = 0; i < examCount; i++)
    newExamArray[i] = EFBuffer[i];

  cout << "Sorting...\n";
  sort(newDogArray, newDogArray + dogCount, dogCompare);
  sort(newExamArray, newExamArray + examCount, examCompare);
  sort(newVetArray, newVetArray + vetCount, vetCompare);
  cout << "Sorting complete!\n";

  vetExamSeach(newVetArray, newExamArray, vetCount, examCount);


  return 0;
}

这是搜索功能。出于这个问题,我只是尝试打印我通过的内容。

void search(vet newVetArray[], examine newExamArray[], int vCount, int eCount)
{
  for(int i = 1; i < vCount; i++)
    cout << "in search:     " << newVetArray[i].vid << ' ' << newVetArray[i].eLevel << endl;
}

here is the error I'm getting

Here is my files. Not asking you to do my HW just help me solve my issue

1 个答案:

答案 0 :(得分:0)

当我运行您的代码时,对于readDf,readEF,readVF,getLineCount和vetExamSeach,我得到未定义引用的相同编译错误。 该错误是因为没有这些功能的定义。只是贴花而已。当我定义它们(某种随机的)时,错误消失了。 因此,定义函数,错误就会消失。