2013-03-13 2 views
0

Попытка реализовать сортировку с использованием списка массивов. Однако, похоже, я не могу назвать какие-либо из моих функций списка из основного.Выполнение выбора Сортировка с использованием 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; 
} 
+1

Общий совет «делать не используйте 'using namespace std;' в заголовках, которые предназначены для других людей. –

+0

В чем бы дело? – Methos

+0

Давайте посмотрим: '[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/). И это даже не очень сложно. –

ответ

1

Есть несколько ошибок:

int listofitems[numberofitems]; 

numberofitems потребности быть const, и я предполагаю, поскольку ListItemType является string, что listofitems следует b e массив из string s. Это delcaring функцию:

List myArrayList(); 

, что вы собираетесь это создать экземпляр List и поэтому он должен быть:

List myArrayList ; 

Это:

int mainarraylistsize = (myArrayList.getLength); 

должно быть:

int mainarraylistsize = myArrayList.getLength() ; 

и этот список аргументов не является правильным:

myArrayList.insert(listofitems[i], 1, mainsucc); 

Довод два должны быть ListItemType типа, но вы передаете в int, это он, вероятно, что вы хотели:

myArrayList.insert(i, listofitems[i], mainsucc); 
+0

Я немного смущен тем, что такое ListItemType. Я имею в виду, что это не совсем объяснено. Насколько мне известно, это ссылочная переменная, но я не уверен, как ее определить. – Methos

+0

@Methos Итак, у вас есть 'typedef string ListItemType;' в верхней части заголовка, что означает, что 'ListItemType' является' string', вы можете прочитать о 'typedef' здесь http://en.wikipedia.org/wiki/ Typedef –

+0

Когда я определяю ListItemType как строку в функции retrieve, это дает мне ошибку.Я не думаю, что ListItemType должен быть строкой вообще. – Methos

Смежные вопросы