Не знаете, как настроить методы в файле.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>{