0

Okay, so I have a homework assignment to sort pointer arrays using two different sorts that are buried in functions. I BELIEVE I know how to implement the bubble sort, but I'm just really having trouble understanding what I have to do without using STL containers. Here's what I have already:

#include <iostream>
#include <string>
#include <iomanip>
#include <conio.h>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;



//Enumeration
enum columns{SSN=0, LASTNAME=1};

//Global Constants
const int MAXELEMENTS = 100;

void insertionSort (string* [2][MAXELEMENTS], int);

int main ()
{

int index = 0;
int elemCnt = 0;
string employee_array[2][MAXELEMENTS];
string * p2employee_array [2] [MAXELEMENTS] = {{NULL}};
fstream inFile;


inFile.open("Lab4.csv", ios::in);
if (inFile.fail())
{
    cout<<"File Failed To Open"<<endl;
}

while(!inFile.eof())
{
    //Load the values array
    getline(inFile,employee_array[LASTNAME][index],',');
    getline(inFile,employee_array[SSN][index],'\n');

    //Load the pointers array
    p2employee_array[LASTNAME][index] = &employee_array[LASTNAME][index];
    p2employee_array[SSN][index] = &employee_array[SSN][index];
    elemCnt++;
    index++;
}

inFile.close();
if (inFile.fail())
{
    cout<<"File Failed To Close"<<endl;
}

//Construct a separator line
string line;
line = line.assign(64,'-');

//Display the original data
cout << "ORIGINAL DATA..." << endl << endl;
cout << setw(40) << "Employee Data" << endl
     << setw(40) << "Adrian Rodriguez" << endl << endl << endl;
cout << left << setw(40) << " " << setw(12) << "Address of" << "Address of"
     << endl
     << setw(20) << "SSN"
     << setw(20) << "Last Name" << setw(12) << "SSN" << "Last Name"
     << endl;
cout << line << endl << endl;

elemCnt = elemCnt;

for(index = 0; index<elemCnt; index++)
{
    cout << setw(20) << employee_array[SSN][index]
         << setw(21) << employee_array[LASTNAME][index]
         << setw(12) << p2employee_array[SSN][index]
         << setw(12) << p2employee_array[LASTNAME][index]
         << endl;
}
cout<<endl<<endl;
cout<<"About to sort arrays of pointers in ASCENDING ORDER on LAST NAME..."<<endl;


insertionSort (p2employee_array, elemCnt);
getch ();
return 0;
 }

 //************************************************

void insertionSort (string* p2employee_array, int elemCnt)
{
int j;
char* cmp; // cmp is a pointer to a C string
for( int i = 1; i < size; ++i )
{
cmp = (char*)p2employee_array[i].c_str();//pointer in cmp
j = i - 1;

while(j>=0 && strcmp(cmp,p2employee_array[j].c_str())<0)
{
  p2employee_array[j + 1] = p2employee_array[j]; 
    --j;
}
 p2employee_array[j + 1] = string(cmp); // insert
}

My code will not build a file and this is driving me crazy. Can somebody please tell me what I'm doing wrong?? The error message just says : undefined reference to `insertionSort(std::string* (*) [100], int)

1 Answer 1

2

The forward declaration is this:

void insertionSort (string* [2][MAXELEMENTS], int);

But the definition is this:

void insertionSort (string* p2employee_array, int elemCnt)
{
    ...
}

The function signatures need to match. ie

void insertionSort (string* p2employee_array[2][MAXELEMENTS], int elemCnt)
{
    ...
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.