Не знаете, как настроить методы в файле.cpp при включении заголовка с виртуальными методами

Итак, я новичок в C++ и у меня есть назначение для создания отсортированного связанного списка с предоставленными заголовками sortedlist.h и конечно же node.h. Мне не нужна помощь с каким-либо кодом в методах, только как настроить мои классы, я больше привык к Java, чем к C++. моя проблема, когда я пытался создать методы в файле connectedSortedList.cpp, я получаю такие ошибки

ошибка: "Вяз" не был объявлен в этой области

ошибка: аргумент шаблона 1 недействителен

вот предоставленный sortedList.h с некоторой документацией

#ifndef _SortedListClass_
#define _SortedListClass_

template <class Elm> class SortedList {
public:

// -------------------------------------------------------------------
// Pure virtual functions -- you must implement each of the following
// functions in your implementation:
// -------------------------------------------------------------------

// Clear the list.  Free any dynamic storage.

virtual void clear() = 0;          

// Insert a value into the list.  Return true if successful, false
// if failure.

virtual bool insert(Elm newvalue) = 0;

// Get AND DELETE the first element of the list, placing it into the
// return variable "value".  If the list is empty, return false, otherwise
// return true.

virtual bool getfirst(Elm &returnvalue) = 0;

// Print out the entire list to cout.  Print an appropriate message
// if the list is empty.  Note:  the "const" keyword indicates that
// this function cannot change the contents of the list.

virtual void print() const = 0;

// Check to see if "value" is in the list.  If it is found in the list,
// return true, otherwise return false.  Like print(), this function is
// declared with the "const" keyword, and so cannot change the contents
// of the list.

virtual bool find(Elm searchvalue) const = 0;

// Return the number of items in the list

virtual int size() const = 0;
 };

#endif

вот где я начинаю пытаться построить свой список. Здесь мой файл linksSortedList.h. В этом файле я получаю сообщение об ошибке: ожидаемое имя класса до маркера '{', и я не уверен, почему

#ifndef LINKEDSORTEDLIST_H
#define LINKEDSORTEDLIST_H

#include "SortedList.h"

template <class Elm> class linkedSortedList: public SortedList{
public:

 linkedSortedList();
~linkedSortedList();

 void clear() = 0;          

// Insert a value into the list.  Return true if successful, false
// if failure.

bool insert(Elm newvalue) = 0;

// Get AND DELETE the first element of the list, placing it into the
// return variable "value".  If the list is empty, return false, otherwise
// return true.

bool getfirst(Elm &returnvalue) = 0;

// Print out the entire list to cout.  Print an appropriate message
// if the list is empty.  Note:  the "const" keyword indicates that
// this function cannot change the contents of the list.

void print() const = 0;

// Check to see if "value" is in the list.  If it is found in the list,
// return true, otherwise return false.  Like print(), this function is
// declared with the "const" keyword, and so cannot change the contents
// of the list.

bool find(Elm searchvalue) const = 0;

// Return the number of items in the list

int size() const = 0;

private:

};

#endif  /* LINKEDSORTEDLIST_H */

И вот мой файл connectedSortedList.cpp в этом файле. Я получаю сообщение об ошибке почти на всех моих методах: error: Elm не был объявлен в этой области.

ошибка: аргумент шаблона 1 недействителен

ошибка: "Вяз" не был объявлен в этой области

ошибка: ожидается ',' или ';' перед знаком "{"

#include "linkedSortedList.h"
#include "LinkedNode.h"
template <class Elm>


linkedSortedList<Elm>::linkedSortedList() {
}


linkedSortedList<Elm>::~linkedSortedList() {
}



// Clear the list.  Free any dynamic storage.

void linkedSortedList<Elm>::clear(){

}      

// Insert a value into the list.  Return true if successful, false
// if failure.

bool linkedSortedList<Elm>::insert(Elm newvalue){

}

// Get AND DELETE the first element of the list, placing it into the
// return variable "value".  If the list is empty, return false, otherwise
// return true.

bool linkedSortedList<Elm>::getfirst(Elm &returnvalue){

}

// Print out the entire list to cout.  Print an appropriate message
// if the list is empty.  Note:  the "const" keyword indicates that
// this function cannot change the contents of the list.

void linkedSortedList<Elm>::print(){

}


// Check to see if "value" is in the list.  If it is found in the list,
// return true, otherwise return false.  Like print(), this function is
// declared with the "const" keyword, and so cannot change the contents
// of the list.

bool linkedSortedList<Elm>::find(Elm searchvalue){

}

// Return the number of items in the list
 int linkedSortedList<Elm>::size(){

 }
;

Я полагаю, что я либо что-то упустил, либо просто совершенно не согласен с конструкцией моего класса, как я сказал, что это моя первая работа на С ++, поэтому я не знаю, много ли вы могли бы показать или объяснить, как я должен это делать, что было бы очень признательно. Заранее благодарю за помощь и все, чему я у нее учусь

2 ответа

Решение

Вы должны положить

template <class Elm>

перед каждым методом в файле cpp. Не только до первого. Без этой строки компилятор не знает, что Elm является аргументом шаблона.

Вы должны указать SortedList, какой тип он использует:

template <class Elm> class linkedSortedList: public SortedList <Elm>{
Другие вопросы по тегам