Попытка реализовать сортировку с использованием списка массивов. Однако, похоже, я не могу назвать какие-либо из моих функций списка из основного.Выполнение выбора Сортировка с использованием ArrayList
Когда этот код выполняется, я получаю следующие ошибки:
arraylist.cpp: In function ‘int main()’:
arraylist.cpp:92:49: error: no matching function for call to ‘List::retrieve(int, const char [4], bool&)’
arraylist.cpp:47:6: note: candidate is: void List::retrieve(int, ListItemType&, bool&) const
Я не совсем уверен, как определить функцию ListItemType.
Другие люди в моем классе использовали те же самые точные функции, что и у меня, но их методы, похоже, работают без проблем.
Небольшая помощь была бы приятной.
Заголовок:
/** @file ListA.h */
#include <string>
using namespace std;
const int MAX_LIST = 10;
typedef string ListItemType;
class List
{
public:
List();
bool isEmpty() const;
int getLength() const;
void insert(int index, const ListItemType& newItem, bool& success);
void retrieve(int index, ListItemType& dataItem, bool & success) const;
void remove(int index, bool& success);
private:
ListItemType items[10];
int size;
int translate(int index) const;
};
Реализация:
/** @file ListA.cpp */
#include "ArrayList.h" // header file
#include <iostream>
#include <fstream>
List::List() : size(0)
{
}
bool List::isEmpty() const
{
return size == 0;
}
int List::getLength() const
{
return size;
}
void List::insert(int index, const ListItemType& newItem,
bool& success)
{
success = (index >= 1) &&
(index <= size + 1) &&
(size < MAX_LIST);
if (success)
{
for (int pos = size; pos >= index; --pos)
items[translate(pos + 1)] = items[translate(pos)];
items[translate(index)] = newItem;
++size; // increase the size of the list by one
}
}
void List::remove(int index, bool& success)
{
success = (index >= 1) && (index <= size);
if (success)
{
for (int fromPosition = index + 1;
fromPosition <= size;
++fromPosition)
items[translate(fromPosition - 1)] = items[translate(fromPosition)];
--size; // decrease the size of the list by one
} // end if
} // end remove
void List::retrieve(int index, ListItemType& dataItem,
bool& success) const
{
success = (index >= 1) && (index <= size);
if (success)
dataItem = items[translate(index)];
}
int List::translate(int index) const
{
return index - 1;
}
int main()
{
int var1 = 1;
int numberofitems;
int n = 0;
int p = 0;
cout << "Please enter the number of data items:" << endl;
cin >> numberofitems;
cout << endl;
cout << "Please enter the data items, one per line:" << endl;
int listofitems[10];
//string mainlistitemptype = "int";
List myArrayList;
cout << myArrayList.getLength() << endl;
if (myArrayList.isEmpty()) // tests before
{
cout << "This list is empty \n" << endl;
}
else
{
cout << "List is not empty! \n"<< endl;
}
//myArrayList.size(numberofitems);
bool mainsucc = false;
int mainarraylistsize = myArrayList.getLength();
for (int i = 0; i<numberofitems; i++)
{
cout << "Enter number " << i + 1 << " : " ;
cin >> listofitems[i];
myArrayList.insert(listofitems[i], "int", mainsucc);
}
for (int i=0; i<mainarraylistsize; i++)
{
cout << myArrayList.retrieve(0, "int", mainsucc);
}
return 1;
}
Общий совет «делать не используйте 'using namespace std;' в заголовках, которые предназначены для других людей. –
В чем бы дело? – Methos
Давайте посмотрим: '[C++], используя пространство имен std', в качестве поискового запроса, как минимум, [SO 4649003] (http://stackoverflow.com/questions/4649003/), [1452721] (http://stackoverflow.com/questions/1452721 /), [SO 7134403] (http://stackoverflow.com/questions/7134403/), [SO 14575799] (http://stackoverflow.com/questions/14575799/), [SO 5469060] (http://stackoverflow.com/questions/5469060/), [SO 5849457] (http://stackoverflow.com/questions/5849457/). И это даже не очень сложно. –