c++ - Issues passing an ellement of an Array of Records to Temporary Array of Records -
i'm new code monkey in training, , i'm having issues working arrays , structs. have main file have array of records declared. pass array external function, quick sort performed on of fields in record. first name. i'm having issues copy elements in array of records, temporary array sorting algorith. know c++ have qsort function built in, i'm working on right now, need have algoritm written out way is. able work using array.
i'm getting following error when trying compile make file.
make g++ -c -o main2.o main2.cpp g++ -c externarray2.cpp -o externarray2.o externarray2.cpp: in function ‘void copytemp(employeerecord*, employeerecord*, int, int)’: externarray2.cpp:52: error: cannot convert ‘float’ ‘void*’ argument ‘1’ ‘void* memcpy(void*, const void*, size_t)’ externarray2.cpp:53: error: cannot convert ‘float’ ‘void*’ argument ‘1’ ‘void* memcpy(void*, const void*, size_t)’ externarray2.cpp:54: error: cannot convert ‘float’ ‘void*’ argument ‘1’ ‘void* memcpy(void*, const void*, size_t)’ externarray2.cpp:55: error: cannot convert ‘float’ ‘void*’ argument ‘1’ ‘void* memcpy(void*, const void*, size_t)’ externarray2.cpp:56: error: cannot convert ‘float’ ‘void*’ argument ‘1’ ‘void* memcpy(void*, const void*, size_t)’ externarray2.cpp:57: error: cannot convert ‘float’ ‘void*’ argument ‘1’ ‘void* memcpy(void*, const void*, size_t)’ externarray2.cpp:58: error: cannot convert ‘float’ ‘void*’ argument ‘1’ ‘void* memcpy(void*, const void*, size_t)’ externarray2.cpp:59: error: cannot convert ‘float’ ‘void*’ argument ‘1’ ‘void* memcpy(void*, const void*, size_t)’ externarray2.cpp:60: error: cannot convert ‘float’ ‘void*’ argument ‘1’ ‘void* memcpy(void*, const void*, size_t)’ make: *** [externarray2.o] error 1
make file
test1: main.o externarray.o g++ main.o externarray.o -o test1 externarray.o: externarray.cpp g++ -c externarray.cpp -o externarray.o main.o: main.cpp g++ -c main.cpp -o main.o
header.h
#ifndef _incl_guard #define _incl_guard const int maxemployee =10; const int names = 5; const int length = 15; typedef struct employeerecord { char first[10]; char last[10]; float reghours; float ovrhours; float pay; float gross; float defer; float state; float fed; float ssi; float net; } employeerecord; #endif
main.cpp
#include <iostream> #include <cstring> using namespace std; #include "./header2.h" void showarray(employeerecord employees[], int, const char*); //function prototype 3.1 extern void qsortarray(employeerecord employees[], int, int); //funvtion prototype 3.2 int main(void) { employeerecord myemployee[maxemployee]; strcpy(myemployee[0].first,"john"); strcpy(myemployee[0].last,"doe"); strcpy(myemployee[1].first,"ed"); strcpy(myemployee[1].last, "whittle"); strcpy(myemployee[2].first, "louise"); strcpy(myemployee[2].last, "marion"); strcpy(myemployee[3].first,"paula"); strcpy(myemployee[3].last, "prentiss"); strcpy(myemployee[4].first, "carl"); strcpy(myemployee[4].last, "davidson"); showarray(myemployee, names, "before sort"); qsortarray(myemployee, 0, 4 ); showarray(myemployee, names, "after sort"); return 0; } void showarray(employeerecord employees[], int emp, const char *message) { cout << message << endl; (int test = 0; test < emp; test++) { cout << "first name: " << employees[test].first << endl; cout << "last name: " << employees[test].last << endl; } }
externarray.cpp
#include <cstring> #include <iostream> #include <iomanip> #include <stdio.h> using namespace std; #include "./header2.h" void qsortarray(employeerecord employees[], int, int); //funvtion prototype 3.2 void copytemp(employeerecord tmpemp[], employeerecord emp[], int, int); void qsortarray(employeerecord employees[], int start, int finish) { int left=start, right=finish; char pivot[15]; strcpy(pivot, employees[(start+finish)/2].first); while (left < right) { cout << pivot << " pivot " << endl; cout << "outer loop" << endl; // find left candidate while (strcmp(employees[left].first,pivot) <0) left++; // find right candidate cout << "first inner loop" << endl; while (strcmp(employees[right].first,pivot) > 0 )right--; cout << "inner loop" << endl; if (left <= right) { employeerecord tmpemployee[1]; cout << "create new struct" << endl; copytemp(tmpemployee, employees, 0, left); cout << "copy temp" << endl; copytemp(tmpemployee, employees, 1, right); copytemp(employees, tmpemployee, left, 1); copytemp(employees, tmpemployee, right, 0); left++; right--; cout << "all copy done" <<endl; } } // while left < right cout << "back out of outer loop" << endl; if (start < right) qsortarray(employees,start,right); if (left < finish) qsortarray(employees,left,finish); } void copytemp(employeerecord tmpemp[], employeerecord emp[], int first, int secound) { memcpy(tmpemp[first].first, emp[secound].first, sizeof(emp[secound].first)); memcpy(tmpemp[first].last, emp[secound].last, sizeof(emp[secound].last)); memcpy(tmpemp[first].reghours, emp[secound].reghours, sizeof(emp[secound].reghours)); memcpy(tmpemp[first].ovrhours, emp[secound].ovrhours, sizeof(emp[secound].ovrhours)); memcpy(tmpemp[first].pay, emp[secound].pay, sizeof(emp[secound].pay)); memcpy(tmpemp[first].gross, emp[secound].gross, sizeof(emp[secound].gross)); memcpy(tmpemp[first].defer, emp[secound].defer, sizeof(emp[secound].defer)); memcpy(tmpemp[first].state, emp[secound].state, sizeof(emp[secound].state)); memcpy(tmpemp[first].fed, emp[secound].fed, sizeof(emp[secound].fed)); memcpy(tmpemp[first].ssi, emp[secound].ssi, sizeof(emp[secound].ssi)); memcpy(tmpemp[first].net, emp[secound].net, sizeof(emp[secound].net)); }
in c
can copy entire struct
plain assignment
tmpelm[first] = emp[secound];
this problematic if struct contains members pointers, not case.
Comments
Post a Comment