Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Everything is completed in my program, however when I try to compile it I receiv

ID: 3881523 • Letter: E

Question

Everything is completed in my program, however when I try to compile it I receive the following error:

error C2664: 'void shoeTwoLists(List<char>, List<char>)' : cannot convert argument 1 from 'List<int>' to List<char>'

Please help me find a solution to how I can fix this problem. The code is lsited below (the errors are in test3.cpp):

//ListArray.h

#ifndef LISTARRAY_H

#define LISTARRAY_H

#include <stdexcept>

#include <iostream>

using namespace std;

#pragma warning( disable : 4290 )

template < typename DataType >

class List

{

public:

static const int MAX_LIST_SIZE = 10; // Default maximum list size

// Constructors

List ( int maxNumber = MAX_LIST_SIZE ); // Default constructor

List ( const List& source ); // Copy constructor

  

// Overloaded assignment operator

List& operator= ( const List& source );

// Destructor

virtual ~List ();

// List manipulation operations

virtual void insert ( const DataType& newDataItem ) // Insert after cursor

throw ( logic_error );  

void remove () throw ( logic_error ); // Remove data item

virtual void replace ( const DataType& newDataItem ) // Replace data item

throw ( logic_error );

void clear (); // Clear list

// List status operations

bool isEmpty () const; // List is empty

bool isFull () const; // List is full

// List iteration operations

void gotoBeginning () // Go to beginning

throw ( logic_error );

void gotoEnd () // Go to end

throw ( logic_error );

bool gotoNext () // Go to next data item

throw ( logic_error );

bool gotoPrior () // Go to prior data item

throw ( logic_error );

DataType getCursor () const

throw ( logic_error ); // Return data item

// Output the list structure -- used in testing/debugging

virtual void showStructure () const;

// In-lab operations

void moveToNth ( int n ) // Move data item to pos. n

throw ( logic_error );  

bool find ( const DataType& searchDataItem ) // Find data item

throw ( logic_error );  

protected:

// Data members

int maxSize,

size, // Actual number of data item in the list

cursor; // Cursor array index

DataType *dataItems; // Array containing the list data item

};

#endif

//config.h

#define LAB3_TEST1 1 // 0 => test with char, 1 => test with int

#define LAB3_TEST2 1 // Prog exercise 2: moveToNth

#define LAB3_TEST3 1 // Prog exercise 3: find

/**

* Ordered list class tests.

*/

#define LAB4_TEST1 0 // merge: programming exercise 2

#define LAB4_TEST2 0 // subset: programming exercise 3

//test3.cpp

#include <iostream>

using namespace std;

// Because of C++ template implementations, must include source for templated class

// That is ugly, but it is required.

#include "ListArray.cpp"

#include "config.h"

void print_help();

void showTwoLists(List<char> list1, List<char> list2); // Displays two lists that are supposedly equivalent.

int main()

{

// hack: put a "try/catch" with list creation code?

// we need to demonstrate use of the try/catch syntax.

#if LAB3_TEST1

List<int> testList(8); // Test list to test with ints

List<int> copyList(testList); // Used to test copy constructor

List<int> assignList; // Used to test assignment operator

int testData; // List data item

#else

List<char> testList(8); // Test list to test with chars

List<char> copyList(testList); // Used to test copy constructor

List<char> assignList; // Used to test assignment operator

char testData; // List data item

#endif

int n; // Position within list

char cmd; // Input command

print_help();

do

{

testList.showStructure(); // Output list

cout << endl << "Command: "; // Read command

cin >> cmd;

if ( cmd == '+' || cmd == '=' || cmd == '?' )

cin >> testData;

else if ( cmd == 'M' || cmd == 'm' )

cin >> n;

switch ( cmd )

{

case 'H' : case 'h':

print_help();

break;

case '+' : // insert

cout << "Insert " << testData << endl;

try

{

testList.insert(testData);

}

catch (logic_error &e)

{

cerr << "EXCEPTION: A logic error occurred in the insert function.";

}

break;

case '-' : // remove

cout << "Remove the data item marked by the cursor"

<< endl;

try

{

testList.remove();

}

catch (logic_error &e)

{

cerr << "EXCEPTION: A logic error occurred in the remove function.";

}

break;

case '=' : // replace

cout << "Replace the data item marked by the cursor "

<< "with " << testData << endl;

try

{

testList.replace(testData);

}

catch (logic_error &e)

{

cerr << "EXCEPTION: A logic error occurred in the replace function.";

}

break;

case '@' : // getCursor

try

{

cout << "Data item marked by the cursor is "

<< testList.getCursor() << endl;

}

catch (logic_error &e)

{

cerr << "EXCEPTION: A logic error occurred in the getCursor function.";

}

break;

case '<' : // gotoBeginning

cout << "Go to the beginning of the list" << endl;

try

{

testList.gotoBeginning();

}

catch (logic_error &e)

{

cerr << "EXCEPTION: A logic error occurred in the gotoBeginning function.";

}

break;

case '>' : // gotoEnd

cout << "Go to the end of the list" << endl;

try

{

testList.gotoEnd();

}

catch (logic_error &e)

{

cerr << "EXCEPTION: A logic error occurred in the gotoEnd function.";

}

break;

case 'N' : case 'n' : // gotoNext

try

{

if ( testList.gotoNext() )

cout << "Go to the next data item" << endl;

else

cout << "Failed -- either at the end of the list "

<< "or the list is empty" << endl;

}

catch (logic_error &e)

{

cerr << "EXCEPTION: A logic error occurred in the gotoNext function.";

}

break;

case 'P' : case 'p' : // gotoPrior

try

{

if ( testList.gotoPrior() )

cout << "Go to the prior data item" << endl;

else

cout << "Failed -- either at the beginning of the "

<< "list or the list is empty" << endl;

}

catch (logic_error &e)

{

cerr << "EXCEPTION: A logic error occurred in the gotoPrior function.";

}

break;

case 'C' : case 'c' : // clear

cout << "Clear the list" << endl;

testList.clear();

break;

case 'E' : case 'e' : // isEmpty

if ( testList.isEmpty() )

cout << "List is empty" << endl;

else

cout << "List is NOT empty" << endl;

break;

case 'F' : case 'f' : // isFull

if ( testList.isFull() )

cout << "List is full" << endl;

else

cout << "List is NOT full" << endl;

break;

case '!' :

showTwoLists(copyList, testList);

break;

case '#' :

assignList.insert('x');

assignList = testList;

showTwoLists(assignList, testList);

break;

#if LAB3_TEST2

case 'M' : case 'm' : // In-lab Exercise 2

cout << "Move the data item marked by the cursor to "

<< "posititon " << n << endl;

try

{

testList.moveToNth(n);

}

catch (logic_error &e)

{

cerr << "EXCEPTION: A logic error occurred in the moveToNth function.";

}

break;

#endif // LAB3_TEST1

#if LAB3_TEST3

case '?' : // In-lab Exercise 3

try

{

if ( testList.find(testData) )

cout << "Found" << endl;

else

cout << "NOT found" << endl;

}

catch (logic_error &e)

{

cerr << "EXCEPTION: A logic error occurred in the find function.";

}

break;

#endif // LAB3_TEST3

case 'Q' : case 'q' : // Quit test program

break;

default : // Invalid command

cout << "Inactive or invalid command" << endl;

}

}

while ( cin && cmd != 'Q' && cmd != 'q' );

if( !cin ) {

cout << "Input error" << endl;

}

return 0;

}

void showTwoLists(List<char> list1, List<char> list2) {

// Variables should match, but dynamic memory buffer must be different

cout << "Look at the two lists below and decide whether they are equivalent" << endl;

cout << "List 1: ";

list1.showStructure();

cout << "List 2: ";

list2.showStructure();

cout << endl;

}

void print_help()

{

cout << endl << "Commands:" << endl;

cout << " H : Help (displays this message)" << endl;

cout << " +x : Insert x after the cursor" << endl;

cout << " - : Remove the data item marked by the cursor" << endl;

cout << " =x : Replace the data item marked by the cursor with x"

<< endl;

cout << " @ : Display the data item marked by the cursor" << endl;

cout << " < : Go to the beginning of the list" << endl;

cout << " > : Go to the end of the list" << endl;

cout << " N : Go to the next data item" << endl;

cout << " P : Go to the prior data item" << endl;

cout << " C : Clear the list" << endl;

cout << " E : Empty list?" << endl;

cout << " F : Full list?" << endl;

cout << " ! : Test copy constructor" << endl;

cout << " # : Test assignment operator" << endl;

cout << " M n : Move data item marked by cursor to pos. n ("

#if LAB3_TEST2

<< "Active "

#else

<< "Inactive "

#endif // LAB3_TEST2

<< ": In-lab Ex. 2)" << endl;

cout << " ?x : Search rest of list for x ("

#if LAB3_TEST3

<< "Active "

#else

<< "Inactive "

#endif // LAB3_TEST3

<< ": In-lab Ex. 3)" << endl;

cout << " Q : Quit the test program" << endl;

cout << endl;

}

//show3.cpp

#include "ListArray.h"

template <typename DataType>

void List<DataType>:: showStructure () const

// outputs the data items in a list. if the list is empty, outputs

// "empty list". this operation is intended for testing/debugging

// purposes only.

{

int j; // loop counter

if ( size == 0 )

cout << "empty list" << endl;

// The Ordered List code blows up below. Since this is just debugging

// code, we check for whether the OrderedList is defined, and if so,

// print out the key value. If not, we try printing out the entire item.

// Note: This assumes that you have used the double-inclusion protection

// in your OrderedList.cpp file by doing a "#ifndef ORDEREDLIST_CPP", etc.

// If not, you will need to comment out the code in the section under

// the "else", otherwise the compiler will go crazy in lab 4.

// The alternative is to overload operator<< for all data types used in

// the ordered list.

else

{

cout << "size = " << size

<< " cursor = " << cursor << endl;

for ( j = 0 ; j < maxSize ; j++ )

cout << j << " ";

cout << endl;

for ( j = 0 ; j < size ; j++ ) {

if( j == cursor ) {

cout << "[";

cout << dataItems[j]

#ifdef ORDEREDLIST_CPP

.getKey()

#endif

;

cout << "]";

cout << " ";

}

else

cout << dataItems[j]

#ifdef ORDEREDLIST_CPP

.getKey()

#endif

<< " ";

}

cout << endl;

}

}

//ListArray.cpp

#include "ListArray.h"

template < typename DataType >

List<DataType>::List(int maxNumber)

{

maxSize = maxNumber;

size = 0;

cursor = -1;

dataItems = new DataType[maxSize];

}

template < typename DataType >

List<DataType>::List(const List& source)

{

maxSize = source.maxSize;

size = source.size;

cursor = source.cursor;

dataItems = new DataType[maxSize];

for (int i = 0; i<size; i++)

{

dataItems[i] = source.dataItems[i];

}

}

template < typename DataType >

List<DataType>& List<DataType>::operator= (const List& source)

{

delete[] dataItems;

size = source.size;

maxSize = source.maxSize;

cursor = source.cursor;

dataItems = new DataType[maxSize];

for (int i = 0; i<size; i++)

{

dataItems[i] = source.dataItems[i];

}

return *this;

}

template < typename DataType >

List<DataType>::~List()

{

delete[] dataItems;

}

template < typename DataType >

void List<DataType>::insert(const DataType& newDataItem)

throw (logic_error)

{

if (size == maxSize)

throw logic_error("List is full");

else

{

for (int i = size - 1; i>cursor; i--){

DataType initialI = dataItems[i];

dataItems[i] = dataItems[i + 1];

dataItems[i + 1] = initialI;

}

dataItems[cursor + 1] = newDataItem;

size++;

cursor++;

}

}

template < typename DataType >

void List<DataType>::remove() throw (logic_error)

{

if (size == 0){

throw logic_error("the list is empty");

}

else{

if (cursor == size - 1)

{

size--;

gotoBeginning();

}

else

{

for (int i = cursor; i<size; i++)

{

dataItems[i] = dataItems[i + 1];

}

size--;

}

}

}

template < typename DataType >

void List<DataType>::replace(const DataType& newDataItem)

throw (logic_error)

{

if (size == 0)

{

throw logic_error("The List is full");

}

else

{

dataItems[cursor] = newDataItem;

}

}

template < typename DataType >

void List<DataType>::clear()

{

size = 0;

cursor = 0;

}

template < typename DataType >

bool List<DataType>::isEmpty() const

{

if (size == 0)

return true;

else

return false;

}

template < typename DataType >

bool List<DataType>::isFull() const

{

if (size != MAX_LIST_SIZE)

return false;

else

return true;

}

template < typename DataType >

void List<DataType>::gotoBeginning()

throw (logic_error)

{

if (size == 0)

{

throw logic_error("The List is empty");

}

else

{

cursor = 0;

}

}

template < typename DataType >

void List<DataType>::gotoEnd()

throw (logic_error)

{

if (size == 0)

{

throw logic_error("The List is empty");

}

else

{

cursor = size - 1;

}

}

template < typename DataType >

bool List<DataType>::gotoNext()

throw (logic_error)

{

if (size == 0)

{

throw logic_error("The List is empty");

}

else

{

if (cursor<size - 1)

{

cursor++;

return true;

}

}

return false;

}

template < typename DataType >

bool List<DataType>::gotoPrior()

throw (logic_error)

{

if (isEmpty())

{

throw logic_error("The List is empty");

}

else

{

if (cursor != 0)

{

cursor--;

return true;

}

}

return false;

}

template < typename DataType >

DataType List<DataType>::getCursor() const

throw (logic_error)

{

DataType t = dataItems[cursor];

if (isEmpty())

throw logic_error("List is empty, nothing to retrieve");

else

return t;

}

#include "show3.cpp"

template < typename DataType >

void List<DataType>::moveToNth(int n)

throw (logic_error)

{

}

template < typename DataType >

bool List<DataType>::find(const DataType& searchDataItem)

throw (logic_error)

{

return false;

}

Explanation / Answer

#if LAB3_TEST1
    List<int> testList(8);    // Test list to test with ints
    List<int> copyList(testList); // Used to test copy constructor
    List<int> assignList;     // Used to test assignment operator
    int testData;             // List data item
#else
    List<char> testList(8);   // Test list to test with chars
    List<char> copyList(testList); // Used to test copy constructor
    List<char> assignList;     // Used to test assignment operator
    char testData;            // List data item
#endif


If you look into this block you will find that the type of testList and copyList is either List<int> or List<char> based on LAB3_TEST1

but latter you try calling
showTwoLists(copyList, testList);

but it is expecting params (List<char>, List<char>) irespetble of LAB3_TEST1
and thus the error is quite justified

What you can do is:
1.
REPLACE

void showTwoLists(List<char> list1, List<char> list2); // Displays two lists that are supposedly equivalent.

WITH

// Displays two lists that are supposedly equivalent.
#if LAB3_TEST1
    void showTwoLists(List<int> list1, List<int> list2);
#else
    void showTwoLists(List<char> list1, List<char> list2);
#endif

2.
REPLACE

void showTwoLists(List<char> list1, List<char> list2) {
    // Variables should match, but dynamic memory buffer must be different
    cout << "Look at the two lists below and decide whether they are equivalent" << endl;
    cout << "List 1: ";
    list1.showStructure();
    cout << "List 2: ";
    list2.showStructure();
    cout << endl;
}


WITH

#if LAB3_TEST1
    void showTwoLists(List<int> list1, List<int> list2) {
    // Variables should match, but dynamic memory buffer must be different
    cout << "Look at the two lists below and decide whether they are equivalent" << endl;
    cout << "List 1: ";
    list1.showStructure();
    cout << "List 2: ";
    list2.showStructure();
    cout << endl;
}
#else
    void showTwoLists(List<char> list1, List<char> list2) {
    // Variables should match, but dynamic memory buffer must be different
    cout << "Look at the two lists below and decide whether they are equivalent" << endl;
    cout << "List 1: ";
    list1.showStructure();
    cout << "List 2: ";
    list2.showStructure();
    cout << endl;
}

#endif

What else you can do is:
try generic List

REPLACE

void showTwoLists(List<char> list1, List<char> list2); // Displays two lists that are supposedly equivalent.

WITH

void showTwoLists(List list1, List list2); // Displays two lists that are supposedly equivalent.

and REPLACE

void showTwoLists(List<char> list1, List<char> list2) {
    // Variables should match, but dynamic memory buffer must be different
    cout << "Look at the two lists below and decide whether they are equivalent" << endl;
    cout << "List 1: ";
    list1.showStructure();
    cout << "List 2: ";
    list2.showStructure();
    cout << endl;
}


WITH

void showTwoLists(List list1, List list2) {
    // Variables should match, but dynamic memory buffer must be different
    cout << "Look at the two lists below and decide whether they are equivalent" << endl;
    cout << "List 1: ";
    list1.showStructure();
    cout << "List 2: ";
    list2.showStructure();
    cout << endl;
}

*Note that not all compilers support this and is not safe to use

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote