#c #templates
#c #шаблоны
Вопрос:
Я добрался до этого пункта, и я посмотрел в нескольких местах, уже пытаясь просто устранить первую ошибку, но я не могу применить к ней решения, поэтому я надеюсь, что здесь поможет.
(84): error c4430: missing type specifier - int assumed. Note: C does not support default-int
(84): warning C4346: 'SortedLinkedList<T>::{ctor}' : dependent name is not a type
(84): error C2143: syntax error : missing ',' before 'amp;'
(93): error C2244: 'SortedLinkedList<T>::{ctor}' : unable to match function definition to an existing declaration
(125): error C2244: 'SortedLinkedList<T>::add' : unable to match function definition to an existing declaration
(42) : see declaration of 'SortedLinkedList<T>::add'
(150): error C2244: 'SortedLinkedList<T>::toString' : unable to match function definition to an existing declaration
(48) : see declaration of 'SortedLinkedList<T>::toString'
#ifndef SORTEDLINKEDLIST_H
#define SORTEDLINKEDLIST_H
#include <iostream>
#include <new> // Needed for bad_alloc exception
#include <cstdlib> // Needed for the exit function
using namespace std;
//**********************
// Struct class *
//**********************
template <class T>
struct Node {
int data;
Node* next;
};
template <class T>
class SortedLinkedList{
private:
T* head;
T* node1;
T* node2;
T* node;
T* n;
T* ptr;
int* size;
public:
//constructor
SortedLinkedList();
//copy constructor
SortedLinkedList(const SortedLinkedListamp;);
//destructor
~SortedLinkedList();
//destroy function. Calls the destructor.
T destroy();
//add function.
(42)T add (const int value);
// boolean accessor
bool exists(int element);
// toString accessor
(43) T toString();
T amp;operator << (const int amp;);
};
//***************************************************
// Constructor. Sets the head to null and size to 0 *
//***************************************************
template <class T>
SortedLinkedList<T>::SortedLinkedList(){
head = NULL;
size = 0;
}
//***********************************************
// Destructor. Creates a temp pointer and moves *
// the head over till head is NULL *
//***********************************************
template <class T>
SortedLinkedList<T>::~SortedLinkedList(){
while (head != NULL) {
ptr = head;
head = head -> next;
delete ptr;
}
cout << "nBut oh well...DESTRUCTED!n" << endl;
}
//***********************************************
// My Copy Constructor *
//***********************************************
template <class T>
(84)
SortedLinkedList<T>::SortedLinkedList(const SortedLinkedListInt, amp;obj){
size = obj.size;
head = obj.head;
node = obj.node;
node1 = obj.node1;
node2 = obj.node2;
n = obj.node;
cout << "COPIED!" << endl;
(93) }
//*************************************************
// And here is where all the fun begins. *
// This checks the element and rearranges the list*
// to its appropriateness *
//*************************************************
template <class T>
void SortedLinkedList<T>::add(int newElement){
if (head == NULL){
head = new Node;
head->next = NULL;
head->data = (newElement);
}
else if(head->data > newElement){
node1 = new Node;
node1->data = newElement;
node1->next = head;
head = node1;
}
else{
for(node2=head; node2->next!= NULL; node2 = node2->next)
if(node2->next->data > newElement)
break;
node = new Node;
node->next = (node2->next);
node->data = (newElement);
node2->next = (node);
size;
}
(125)
}
//***********************************************
// Checks to see if inputed number exist in List*
//***********************************************
template <class T>
bool SortedLinkedList<T>::exists (int element){
for (n = head; n != NULL; n = n -> next) // how to write n.getElement() in c
if(element == n->data) //analogous to compareTo (java)
return true;
return false;
}
//***********************************************
// toString method outputs the whole vector list*
//***********************************************
template <class T>
void SortedLinkedList<T>::toString(){
for (n = head; n != NULL; n = n->next){
cout << n->data << endl;
}
cout << "n";
(150) }
#endif
Ответ №1:
(84)
SortedLinkedList<T>::SortedLinkedList(const SortedLinkedListInt, amp;obj){
Что это ‘,’ там делает?
Должно быть:
template <class T>
SortedLinkedList<T>::SortedLinkedList(const SortedLinkedListInt<T>amp; obj){
...........
ТАКЖЕ:
Должно быть:
template <class T>
T SortedLinkedList<T>::toString(){
......
Не void
как в вашем коде.
Или void
но void toString();
либо в объявлении. Определение должно соответствовать объявлению.
Ответ №2:
Обратите внимание, конечно, но я думаю, что ваш конструктор копирования должен принимать const SortedLinkedListInt вместо const SortedLinkedListInt
Более того, ваш метод add не соответствует вашему прототипу (возвращает void вместо T)
Ответ №3:
Возможно, я что-то пропустил, но:
- Строка 84, где определен тип «SortedLinkedListInt»?
- Почему определение вашего конструктора копирования отличается от его объявления?